unit CadCliente;

interface

uses
  Windows, system.UItypes, IB_Access,  Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ModeloCadastro, IB_Components, Grids, IB_Grid, StdCtrls,
  Buttons, ExtCtrls, ComCtrls, IB_Controls, Mask, Menus, Tabs,
   ToolWin, ImgList, jpeg, AppEvnts, IB_Events, UCBase, Clipbrd, IB_EditButton,
  System.ImageList, ACBrBase, ACBrValidador;

type
  TConsisteInscricaoEstadual  = function (const Insc, UF: String): Integer; stdcall;
  TVersaoDLL                  = function : Integer; stdcall;

type
  TfrmCadCliente = class(TFrModeloCadastro)
    popInscricao: TPopupMenu;
    ISENTO1: TMenuItem;
    qrVerificaSequencial: TIB_Query;
    qrTipoAtendimento: TIB_Query;
    dsrTipoAtendimento: TIB_DataSource;
    edtCnpj: TIB_Edit;
    edtUltimaMovimentacao: TIB_Edit;
    edtRazaoSocial: TIB_Edit;
    edtTipo: TIB_ComboBox;
    edtNomeFantasia: TIB_Edit;
    edtTele1: TIB_Edit;
    edtTele2: TIB_Edit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn4: TBitBtn;
    qrPedido: TIB_Query;
    dsrPedido: TIB_DataSource;
    BitBtn5: TBitBtn;
    edtInscricao: TIB_Edit;
    dbDesde: TIB_Edit;
    edtEmail: TIB_Edit;
    pgcOutros: TPageControl;
    tabEnderecos: TTabSheet;
    tabAtendimento: TTabSheet;
    Panel8: TPanel;
    edtTipoAtendimento: TIB_LookupCombo;
    IB_Grid1: TIB_Grid;
    btnEditarAtendimento: TBitBtn;
    btnRegistrarAtendimento: TBitBtn;
    tabPedido: TTabSheet;
    Panel9: TPanel;
    rdbTodas: TRadioButton;
    rdb_5_Dias: TRadioButton;
    IB_Grid2: TIB_Grid;
    rdb_15_dias: TRadioButton;
    rdb_30_dias: TRadioButton;
    ImageList1: TImageList;
    pgcEnderecos: TPageControl;
    tabEntrega: TTabSheet;
    grEndereco_Entrega: TGroupBox;
    edtBairroTransporte: TIB_Edit;
    edtCepTransporte: TIB_Edit;
    edtEnderecoTransporte: TIB_Edit;
    edtCidadeTransporte: TIB_Edit;
    edtNumeroTransporte: TIB_Edit;
    edtComplementoTransporte: TIB_Edit;
    tabCobranca: TTabSheet;
    GroupBox3: TGroupBox;
    edtBairroCobranca: TIB_Edit;
    edtCepCobranca: TIB_Edit;
    edtEnderecoCobranca: TIB_Edit;
    edtCidadeCobranca: TIB_Edit;
    edtNumeroCobranca: TIB_Edit;
    edtComplementoCobranca: TIB_Edit;
    Panel4: TPanel;
    Panel5: TPanel;
    edtContatoCobranca: TIB_Edit;
    edtContatoTransporte: TIB_Edit;
    edtObsTransporte: TIB_Memo;
    edtObsCobranca: TIB_Memo;
    lblTotalAtendimento: TLabel;
    lblTotalColeta: TLabel;
    tbAtendimentoCliente: TIB_Query;
    dsrAtendimentoCliente: TIB_DataSource;
    btnPedidoNovo: TBitBtn;
    EditarPedido: TBitBtn;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    edtAbertura: TIB_Edit;
    edtFechamento: TIB_Edit;
    edtAlmocoInicio: TIB_Edit;
    edtAlmocoFim: TIB_Edit;
    Label4: TLabel;
    Label5: TLabel;
    popPesquisaCepTansporte: TPopupMenu;
    PesquisarCEP1: TMenuItem;
    popPesquisaCepCobranca: TPopupMenu;
    PesquisaCEP1: TMenuItem;
    qrStatus: TIB_Query;
    dsrStatus: TIB_DataSource;
    edtStatus: TIB_LookupCombo;
    popCadStatus: TPopupMenu;
    Cadastrodestatus1: TMenuItem;
    PesquiarStatus1: TMenuItem;
    edtCnae: TIB_LookupCombo;
    qrCnae: TIB_Query;
    dsrCnae: TIB_DataSource;
    tabNF: TTabSheet;
    IB_Grid3: TIB_Grid;
    qrNF: TIB_Query;
    dsrCTRC: TIB_DataSource;
    btnNovoCTRC: TBitBtn;
    btnDetalharCTRC: TBitBtn;
    qrTabela: TIB_Query;
    dsrTabela: TIB_DataSource;
    TabSheet1: TTabSheet;
    qryVendedor: TIB_Query;
    dsrVendedor: TIB_DataSource;
    Contatos: TTabSheet;
    btnNovoContato: TBitBtn;
    btnDetalharContato: TBitBtn;
    btnEcluirContato: TBitBtn;
    dsrContatos: TIB_DataSource;
    IB_Grid4: TIB_Grid;
    edtTabela: TIB_LookupCombo;
    edtUfTransporte: TIB_LookupCombo;
    qrUF_Transporte: TIB_Query;
    dsrUf_Transporte: TIB_DataSource;
    qrUF_Cobranca: TIB_Query;
    dsrUf_Cobranca: TIB_DataSource;
    edtUFCobranca: TIB_LookupCombo;
    btnPesquisaTabela: TBitBtn;
    tabContas: TTabSheet;
    Panel10: TPanel;
    cbbCobranca: TComboBox;
    BitBtn3: TBitBtn;
    btnDetalharCobranca: TBitBtn;
    IB_Grid5: TIB_Grid;
    dbCodigo: TIB_Edit;
    dbDescricaoCNAE: TIB_Edit;
    qrContatos: TIB_Query;
    qryItentificadores: TIB_Query;
    dtIdentificadores: TIB_DataSource;
    qryPraca: TIB_Query;
    dtPraca: TIB_DataSource;
    dbCod_Municipio_IBGE: TIB_Edit;
    edtGrupoFaturamento: TIB_LookupCombo;
    BitBtn7: TBitBtn;
    dsrGrupoFaturamento: TIB_DataSource;
    qrGrupoFaturamento: TIB_Query;
    btnPesquisaReceitaFederal: TBitBtn;
    popPegaCNPJ: TPopupMenu;
    copiaCNPJsemmscara1: TMenuItem;
    copiaCNPJcommscara1: TMenuItem;
    pgc1: TPageControl;
    ts1: TTabSheet;
    ts2: TTabSheet;
    grp1: TGroupBox;
    edtVENDEDORTELE2: TIB_Edit;
    edtVENDEDORTELE1: TIB_Edit;
    edtVENDEDORCIDADE: TIB_Edit;
    edtNomeVendedor: TIB_Edit;
    edtDataVendedorAlterado: TIB_Edit;
    btnPesquisaVendedor: TBitBtn;
    btnIncluiVendedor: TBitBtn;
    dbCodigoVendedor: TIB_Edit;
    dbPraca: TIB_LookupCombo;
    IB_CheckBox1: TIB_CheckBox;
    dbSimplesNacional: TIB_CheckBox;
    lbl1: TLabel;
    grdItentificadores: TIB_Grid;
    pnlIdentificadores: TPanel;
    btnIncluirIdentificador: TBitBtn;
    btnRetirarItem: TBitBtn;
    btnSalvaIdentificador: TBitBtn;
    btnCancelaIdentificador: TBitBtn;
    ts3: TTabSheet;
    dbObservacao: TIB_Memo;
    btnPesquisaCNAE: TBitBtn;
    IB_Edit1: TIB_Edit;
    btn1: TBitBtn;
    btn2: TBitBtn;
    qryClassificacaoClientes: TIB_Query;
    dtClassificacaoClientes: TIB_DataSource;
    qryMudancaStatus: TIB_Query;
    NOCONTRIBUINTE1: TMenuItem;
    qrContas: TIB_Query;
    dtContas: TIB_DataSource;
    AcbrValidador: TACBrValidador;
    procedure BtCancelarClick(Sender: TObject);
    procedure BtEditarClick(Sender: TObject);
    procedure edtCepCobrancaExit(Sender: TObject);
    procedure edtCepTransporteExit(Sender: TObject);
    procedure BtInserirClick(Sender: TObject);
    procedure BtGravarClick(Sender: TObject);
    procedure edtCnpjExit(Sender: TObject);
    procedure edtCnpjEnter(Sender: TObject);
    procedure ISENTO1Click(Sender: TObject);
    procedure AtualizaTela;
    procedure MontaMascaraCliente;
    procedure edtTipoAtendimentoChange(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure BtAnteriorClick(Sender: TObject);
    procedure BtProximoClick(Sender: TObject);
    procedure btnEditarAtendimentoClick(Sender: TObject);
    procedure AvisarAtendimentos;
    procedure btnRegistrarAtendimentoClick(Sender: TObject);
    function VerificaCnpj : Boolean;
    procedure PegarEnderecoTransporte;
    procedure BtExcluirClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure edtContatoCobrancaExit(Sender: TObject);
    procedure rdbTodasClick(Sender: TObject);
    procedure rdb_5_DiasClick(Sender: TObject);
    procedure rdb_15_diasClick(Sender: TObject);
    procedure rdb_30_diasClick(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure btnVoltarClick(Sender: TObject);
    procedure btnEditar2Click(Sender: TObject);
    procedure pgcOutrosChange(Sender: TObject);
    procedure edtTele1Exit(Sender: TObject);
    procedure edtTele2Exit(Sender: TObject);
    procedure dsrPedidoStateChanged(Sender: TIB_DataSource;
      ADataset: TIB_Dataset);
    procedure dsrAtendimentoClienteStateChanged(Sender: TIB_DataSource;
      ADataset: TIB_Dataset);
    procedure FormCreate(Sender: TObject);
    procedure btnPedidoNovoClick(Sender: TObject);
    procedure EditarPedidoClick(Sender: TObject);
    procedure edtObsTransporteKeyPress(Sender: TObject; var Key: Char);
    procedure edtObsCobrancaKeyPress(Sender: TObject; var Key: Char);
    function VerificaHorario : Boolean;
    procedure ProtegeDadosPorSetor;
    function VerificaCamposObrigatorios : Boolean;

    procedure PesquisarCEP1Click(Sender: TObject);
    procedure PesquisaCEP1Click(Sender: TObject);
    procedure Cadastrodestatus1Click(Sender: TObject);
    procedure edtStatusExit(Sender: TObject);
    procedure edtCepTransporteKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edtCepCobrancaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure PesquiarStatus1Click(Sender: TObject);
    procedure edtStatusKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edtCnaeKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnPesquisaVendedorClick(Sender: TObject);
    procedure btnNovoContatoClick(Sender: TObject);
    procedure btnDetalharContatoClick(Sender: TObject);
    procedure btnEcluirContatoClick(Sender: TObject);
    procedure IB_Grid4CellDblClick(Sender: TObject; ACol, ARow: Integer;
      AButton: TMouseButton; AShift: TShiftState);
    procedure btnPesquisaTabelaClick(Sender: TObject);
    procedure edtTabelaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnIncluirIdentificadorClick(Sender: TObject);
    procedure btnCancelaIdentificadorClick(Sender: TObject);
    procedure btnSalvaIdentificadorClick(Sender: TObject);
    procedure btnRetirarItemClick(Sender: TObject);
    procedure IB_Grid2DblClick(Sender: TObject);
    procedure dbCodigoVendedorExit(Sender: TObject);
    procedure btnIncluiVendedorClick(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure btnPesquisaReceitaFederalClick(Sender: TObject);
    procedure copiaCNPJsemmscara1Click(Sender: TObject);
    procedure copiaCNPJcommscara1Click(Sender: TObject);
    procedure btnDetalharCTRCClick(Sender: TObject);
    procedure IB_Grid3DblClick(Sender: TObject);
    procedure grdPesquisaGetCellProps(Sender: TObject; ACol, ARow: Integer;
      AState: TGridDrawState; var AColor: TColor; AFont: TFont);
    procedure btnPesquisaCNAEClick(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure edtStatusMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure MostraHintSituacaoCadastral;
    procedure edtStatusClick(Sender: TObject);
    procedure NOCONTRIBUINTE1Click(Sender: TObject);
    procedure cbbCobrancaChange(Sender: TObject);
    procedure btnDetalharCobrancaClick(Sender: TObject);
  private
    procedure CondicoesEndereco;
    function CadastrarVendedor: Boolean;
    function VerificaPracaPagamento:Boolean;
    function BuscaDados : boolean;
    { Private declarations }
  public
    { Public declarations }
    Consulta:Boolean;
    Cliente_Exterior,
    Cliente_Corporativo : Boolean;
  end;

var
  frmCadCliente: TfrmCadCliente;

implementation

uses DataModulo, Rotinas, StrUtils, AtendimentoCliente,
  AlteracaoStatusCliente, Math, PesquisaCep, ModeloPesquisa,
  AvisoAtendimentoCliente, CadStatusCliente, CadVendedor,
  ContatoCliente, BuscaCNPJ, cadNF, CadClassificacaoClientes,
  CadContasReceber,Consulta_Dados_Cadastrais, ConsultaCnpj, Pedidos;

{$R *.dfm}

procedure TfrmCadCliente.BtCancelarClick(Sender: TObject);
begin
   inherited ;
   if edpesquisa.Text <> '' then
   begin
      edPesquisa.OnChange(Self);
   end;
   AtualizaTela;
end;

procedure TfrmCadCliente.BtEditarClick(Sender: TObject);
begin
   pgcOutros.ActivePageIndex := 0;
   pgcEnderecos.ActivePage   := tabEntrega;

   if TbPrincipal.FieldByName('CNPJ').IsNotNull then
     edtCnpj.ReadOnly := True;

   AtualizaTela;
   inherited;
   try
      edtRazaoSocial.SetFocus;
      except
   end;
   AvisarAtendimentos;
end;

procedure TfrmCadCliente.edtCepCobrancaExit(Sender: TObject);
begin
   inherited;

   if ValidarCep(TbPrincipal.FieldByName('ENDERECO_COBRANCA_CEP').AsString)  = False then
   begin
      MessageDlg('Cep Inválido', mtWarning, [mbOK], 0);
      edtCepCobranca.SetFocus;
      Exit;
   end;

   {============== Compleda os dados de acordo com cep informado ================}
   if TbPrincipal.FieldByName('ENDERECO_COBRANCA_CEP').AsString = '' then
   begin
      Exit;
   end;

   if TbPrincipal.FieldByName('ENDERECO_COBRANCA_LOGRADOURO').AsString <> '' then
   begin
      Exit;
   end;

   try
     dados.qrCep.Close;
     dados.qrCep.ParamByName('CEP').Value := QuotedSTR(LimpaTexto(edtCepCobranca.Text));
     dados.qrCep.Open;
     if dados.qrCep.IsEmpty then
        Exit;


     TbPrincipal.FieldByName('ENDERECO_COBRANCA_LOGRADOURO').Value := dados.qrCep.FieldByName('TIPO').AsString+' '+dados.qrCep.FieldByName('RUA').AsString;
     TbPrincipal.FieldByName('ENDERECO_COBRANCA_BAIRRO').Value     := dados.qrCep.FieldByName('BAIRRO').AsString;
     TbPrincipal.FieldByName('ENDERECO_COBRANCA_CIDADE').Value     := dados.qrCep.FieldByName('CIDADE').AsString;
     if qrUF_Cobranca.Locate('DESCRICAO', dados.qrCep.FieldByName('UF').AsString, [] ) then
         TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value := qrUF_Cobranca.FieldByName('COD_UF').Value;

   except
   end;
end;

procedure TfrmCadCliente.edtCepTransporteExit(Sender: TObject);
begin
   inherited;
   if ValidarCep (TbPrincipal.FieldByName('ENDERECO_ENTREGA_CEP').AsString) = False  then
   begin
      MessageDlg('Cep Inválido', mtWarning, [mbOK], 0);
      edtCepTransporte.SetFocus;
      Exit;
   end;

   if TbPrincipal.FieldByName('ENDERECO_ENTREGA_CEP').AsString = '' then
   begin
      Exit;
   end;

   if TbPrincipal.FieldByName('ENDERECO_ENTREGA_LOGRADOURO').AsString <> '' then
   begin
      Exit;
   end;

   try
      dados.qrCep.Close;
      dados.qrCep.ParamByName('CEP').Value := QuotedSTR(LimpaTexto(edtCepTransporte.Text));
      dados.qrCep.Open;
      if dados.qrCep.IsEmpty then
         Exit;

      TbPrincipal.FieldByName('ENDERECO_ENTREGA_LOGRADOURO').Value := dados.qrCep.FieldByName('TIPO').AsString + ' '+dados.qrCep.FieldByName('RUA').AsString;
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_BAIRRO').Value     := dados.qrCep.FieldByName('BAIRRO').AsString;
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_CIDADE').Value     := dados.qrCep.FieldByName('CIDADE').AsString;
      TbPrincipal.FieldByName('COD_MUNICIPIO_IBGE').Value          := dados.qrCep.FieldByName('COD_CIDADE_IBGE').AsString;
      TbPrincipal.FieldByName('COD_UF_IBGE').Value                 := dados.qrCep.FieldByName('COD_UF_IBGE').AsString;

      if qrUF_Transporte.Locate('DESCRICAO', dados.qrCep.FieldByName('UF').AsString, [] ) then
         TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value := qrUF_Transporte.FieldByName('COD_UF').Value;
      except
   end;
end;

procedure TfrmCadCliente.BtInserirClick(Sender: TObject);
begin
  inherited;
   TbPrincipal.FieldByName('TIPO_CADASTRO').Value := 'G';

   TbPrincipal.FieldByName('DATA_CAD').Value   := Date;
   TbPrincipal.FieldByName('COD_STATUS').Value := Dados.tbParametro_Cliente.FIeldByName('COD_STATUS_INICIAL').Value;
   TbPrincipal.FieldByName('COD_TABELA').Value := Dados.tbParametro_Cliente.FIeldByName('COD_TABELA').Value;
   TbPrincipal.FieldByName('PERMITE_USAR_OUTRA_TAB_CALCULO').Value := 'F';
   TbPrincipal.FieldByName('OPTANTE_SIMPLES').Value := 'F';

   edtCnpj.ReadOnly := False;
   edtCnpj.Enabled  := True;

   pgcOutros.ActivePageIndex := 0;
   pgcEnderecos.ActivePage   := tabEntrega;
   AtualizaTela;
end;

procedure TfrmCadCliente.BtGravarClick(Sender: TObject);
begin

   if edtRazaoSocial.text = '' then
   begin
      MessageDlg('Informe a Razão Social do cliente', mtWarning, [mbOK], 0);
      edtRazaoSocial.SetFocus;
      Exit;
   end;

   if edtStatus.Text = '' then
   begin
      MessageDlg('Informe o Status do Cliente', mtInformation, [mbOK], 0);
      edtStatus.SetFocus;
      Exit;
   end;

   if trim(dbCod_Municipio_IBGE.text) = '' then
   begin
      if (MessageDlg('Não foi informado o codigo IBGE da cidade do cliente.'+#13+#10+
                     'Sem esta informação a NFe não será transmitida'+#13+#10+''+#13+#10+
                     'Deseja informar o codigo IBGE da Cidade Agora?', mtWarning, [mbYes, mbNo], 0) = mrYes) then
      begin
         pgcEnderecos.ActivePage := tabEntrega;
         dbCod_Municipio_IBGE.SetFocus;
         exit;
      end;
   end;


   if VerificaCamposObrigatorios = False then
      Exit;

   if VerificaHorario = False then
   begin
      Exit;                                                    
   end;

//   TbPrincipal.FieldByName('COD_GRUPO_FATURAMENTO').Value := qrGrupoFaturamento.FieldByName('COD_GRUPO_FATURAMENTO').Value;

   //================= Se a inscricao estadual for diferente de vazio ou isento verifica se é valida ===========
   if (edtInscricao.Text <> '') and (edtInscricao.Text <> 'ISENTO') and (edtInscricao.Text <> 'NÃO CONTRIBUINTE') then
   begin
      AcbrValidador.Documento   := edtInscricao.Text;
      AcbrValidador.Complemento := UpperCase( edtUfTransporte.Text);
      AcbrValidador.TipoDocto   := docInscEst;
      if AcbrValidador.Validar = false then
      begin
        MessageDlg( AcbrValidador.MsgErro , mtError, [mbOK], 0);
        edtInscricao.SetFocus;
        Exit;
      end;
   end;



    //=============== Grava a tabela do cliente ================
   if edtTabela.Text <> '' then
      TbPrincipal.FieldByName('COD_TABELA').Value := qrTabela.FieldByName('COD_TABELA').Value
   else
      TbPrincipal.FieldByName('COD_TABELA').Value := Null;

   CondicoesEndereco;

   if edtUfTransporte.Text <> '' then
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value  := qrUF_Transporte.FieldByName('COD_UF').Value
   else
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value  := Null;
   TbPrincipal.FieldByName('COD_UF_IBGE').Value                 := qrUF_Transporte.FieldByName('COD_UF_IBGE').AsString;

   if  edtUFCobranca.Text <> '' then
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value := qrUF_Cobranca.FieldByName('COD_UF').Value
   else
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value := Null;

   if NOT VerificaPracaPagamento then
     Exit;

   TbPrincipal.FieldByName('COD_CNAE').Value := qrCnae.FieldBYName('COD_CNAE').Value;

   TbPrincipal.FieldByName('COD_STATUS').Value  := qrStatus.FieldByName('COD_STATUS').Value;
   if (TbPrincipal.FieldByName('COD_STATUS').IsModified) and (TbPrincipal.State in [dssedit]) then
   begin
      frmAlteracaoStatusCliente := TfrmAlteracaoStatusCliente.Create(Application);

      frmAlteracaoStatusCliente.qrAlteracaoStatus.Insert;
      frmAlteracaoStatusCliente.qrAlteracaoStatus.FieldByName('COD_ALTERACAO_STATUS_CLIENTE').Value := ProximoCodigoChave('ALTERACAO_STATUS_CLIENTE' , 'COD_ALTERACAO_STATUS_CLIENTE', '');
      frmAlteracaoStatusCliente.qrAlteracaoStatus.FieldByName('COD_USUARIO').Value                  := Dados.qrUsuario.FieldByName('cod_usuario').Value;
      frmAlteracaoStatusCliente.qrAlteracaoStatus.FieldByName('COD_FILIAL').Value                   := dados.qrFilial.FieldByName('COD_FILIAL').Value;
      frmAlteracaoStatusCliente.qrAlteracaoStatus.FieldByName('COD_CLIENTE').Value                  := TbPrincipal.FieldByName('cod_cliente').Value;
      frmAlteracaoStatusCliente.qrAlteracaoStatus.FieldByName('DATA').Value                         := Date;
      frmAlteracaoStatusCliente.qrAlteracaoStatus.FieldByName('HORA').Value                         := Time;

      if frmAlteracaoStatusCliente.ShowModal <> mrok then
         TbPrincipal.FieldByName('COD_STATUS').Value := TbPrincipal.FieldByName('COD_STATUS').OldAsVariant;
      frmAlteracaoStatusCliente.Destroy;
      Screen.OnActiveControlChange := TrocaCor;
   end;


   if TbPrincipal.State in [dssinsert] then
   begin
      descricao_auditoria := 'CADASTROU O CLIENTE '+TbPrincipal.FieldByName('NOMEFANTASIA').AsString +
                            'CNPJ/CPF '   + tbprincipal.FieldByName('cnpj').AsString +
                            'SEQUENCIAL ' + tbprincipal.FieldByName('SEQUENCIAL').AsString+
                            'CÓDIGO '+ tbprincipal.FieldByName('cod_cliente').AsString;
   end;

   if TbPrincipal.State in [dssedit] then
   begin
      descricao_auditoria := 'ALTEROU O CLIENTE ' + TbPrincipal.FieldByName('NOMEFANTASIA').OldAsString +
                            ' CNPJ/CPF '+tbprincipal.FieldByName('cnpj').OldAsString +
                            ' Sequencial '+tbprincipal.FieldByName('SEQUENCIAL').OldAsString+
                            ' Cod Interno '+tbprincipal.FieldByName('cod_cliente').OldAsString;
   end;


    //=============== Se o vendendor foi alterado muda a data de alteracao do vendedor ================
   if TbPrincipal.FieldByName('COD_VENDEDOR').IsModified then
   begin
      if TbPrincipal.FieldByName('COD_VENDEDOR').OldAsString <> TbPrincipal.FieldByName('COD_VENDEDOR').AsString then
         TbPrincipal.FieldByName('VENDEDOR_ALTERADO_EM').Value := Date;
   end;

   TbPrincipal.FieldByName('COD_PRACA').Value:= qryPraca.FIeldByName('CODIGO').Value;

   inherited;
end;

procedure TfrmCadCliente.edtCnpjExit(Sender: TObject);
var erro,
    tipoPessoa :string;
begin
  inherited;
   edtCnpj.Text:=LimpaTexto(edtCnpj.Text);
   if ((TbPrincipal.State in [dssInsert])) or (edtCnpj.ReadOnly = False) then
   begin
      if (edtCnpj.Text <> '              ') and
         (edtCnpj.Text <> '           ') and
         (edtCnpj.Text<>'')then
      begin
         if ValidaCNPJCEICPF(edtCnpj.Text,tipoPessoa,erro)= False then
         begin
            MessageDlg(erro, mtWarning, [mbOK], 0);
            edtCnpj.SetFocus;
            Exit;
         end;

         TbPrincipal.FieldByName('TIPO_CADASTRO').Value := tipoPessoa;

         if (tbPrincipal.FieldByName('TIPO_CADASTRO').AsString = 'J') then
            if BuscaDados = false then
               edtCnae.SetFocus;

          //================= Se for CPF a inscricao é isenta ==============
         if Length(TbPrincipal.FieldByName('CNPJ').AsString) = 11 then
         begin
            TbPrincipal.FieldByName('INSCRICAO').Value := 'ISENTO';
         end;

         VerificaCnpj;
      end
      else TbPrincipal.FieldByName('TIPO_CADASTRO').Value := 'G';
   end;
   MontaMascaraCliente;
end;

procedure TfrmCadCliente.edtCnpjEnter(Sender: TObject);
begin
  inherited;
   tbprincipal.FieldByName('cnpj').EditMask := '';
end;

procedure TfrmCadCliente.ISENTO1Click(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     Exit;

   TbPrincipal.FieldByName('INSCRICAO').Value := 'ISENTO';
end;

procedure TfrmCadCliente.AtualizaTela;
begin
   {============= Realiza a atualizacao dos dados dos clientes
       no caso de edicao e navegacao nos resgistros ============}


   MontaMascaraCliente;

   tbAtendimentoCliente.Close;
   if TbPrincipal.State in [dssinsert] then
   begin
      tbAtendimentoCliente.ParamByName('cod_cliente').Value := Null;
   end
   else
   begin
      tbAtendimentoCliente.ParamByName('cod_cliente').Value := TbPrincipal.fieldbyname('cod_cliente').Value;
   end;
   tbAtendimentoCliente.Open;

   if not qryPraca.Locate('CODIGO',TbPrincipal.FieldByName('COD_PRACA').Value ,[]) then
   begin
      if not qryPraca.Bof then
      begin
         qryPraca.First;
         qryPraca.Prior;
      end;
   end;


   if not qrTipoAtendimento.Bof then
   begin
      qrTipoAtendimento.First;
      qrTipoAtendimento.Prior;
   end;

   if not qrStatus.Locate('COD_STATUS',TbPrincipal.FieldByName('COD_STATUS').Value ,[]) then
   begin
      if not qrStatus.Bof then
      begin
         qrStatus.First;
         qrStatus.Prior;
      end;
   end;

   if not qrCnae.Locate('COD_CNAE',TbPrincipal.FieldByName('COD_CNAE').Value ,[]) then
   begin
      if not qrCnae.Bof then
      begin
         qrCnae.First;
         qrCnae.Prior;
      end;
   end;

    //================= Atualzia a visualizacao dos Pedidos ==============
   if pgcOutros.ActivePage = tabPedido then
   begin
      rdb_5_Dias.Checked := False;
      rdb_5_Dias.Checked := True;
   end;

   if not qrCnae.Locate('COD_CNAE' , TbPrincipal.FieldByName('COD_CNAE').Value , [] ) then
   begin
      if not qrCnae.Bof then
      begin
         qrCnae.First;
         qrCnae.Prior;
      end;
   end;

   if not qrtabela.Locate('COD_TABELA' , TbPrincipal.FieldByName('COD_TABELA').Value , [] ) then
   begin
      if not qrTabela.Bof then
      begin
         qrTabela.First;
         qrTabela.Prior;
      end;
   end;

   if not qryVendedor.Locate('COD_VENDEDOR' , TbPrincipal.FieldByName('COD_VENDEDOR').Value , [] ) then
   begin
      if not qryVendedor.Bof then
      begin
         qryVendedor.First;
         qryVendedor.Prior;
      end;
   end;

   if not qryClassificacaoClientes.Locate('COD_CLASSIFICACAO' , TbPrincipal.FieldByName('COD_CLASSIFICACAO').Value , [] ) then
   begin
      if not qryClassificacaoClientes.Bof then
      begin
         qryClassificacaoClientes.First;
         qryClassificacaoClientes.Prior;
      end;
   end;

   qrNF.Close;
   qrNF.ParamByName('CNPJ_CLIENTE').Value := TbPrincipal.FieldByName('CNPJ').Value;
   qrNF.Open;

   qrContas.Close;
   qrContas.ParamByName('COD_CLIENTE').Value := TbPrincipal.FieldByName('COD_CLIENTE').Value;
   qrContas.Open;

   qrContatos.Close;
   qrContatos.ParamByName('codCliente').Value := TbPrincipal.FieldByName('COD_CLIENTE').Value;
   qrContatos.Open;

   qryMudancaStatus.Close;
   qryMudancaStatus.ParamByName('codCliente').Value := TbPrincipal.FieldByName('COD_CLIENTE').Value;
   qryMudancaStatus.Open;

   qryItentificadores.Close;
   qryItentificadores.ParamByName('VARCOD_CLIENTE').Value := TbPrincipal.FieldByName('COD_CLIENTE').Value;
   qryItentificadores.Open;

   //=============== Atualiza os UFs  ================
   if not qrUF_Transporte.Locate('COD_UF' , TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value  , [] ) then
   begin
      if  NOT qrUF_Transporte.Bof then
      begin
         qrUF_Transporte.First;
         qrUF_Transporte.Prior;
      end;
   end;

   if not qrUF_Cobranca.Locate('COD_UF' , TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value, []) then
   begin
      if not qrUF_Cobranca.Bof then
      begin
         qrUF_Cobranca.First;
         qrUF_Cobranca.Prior;
      end;
   end;
   pnlIdentificadores.Visible:= BtGravar.visible;

   try
    edtStatus.Font.Color := StringToColor(tbPrincipal.FieldByName('STATUS_COR').AsString)
   except
    edtStatus.Font.Color := StringToColor('clBlack');
   end;


{   if not qrGrupoFaturamento.Locate('COD_GRUPO_FATURAMENTO', TbPrincipal.FieldByName('COD_GRUPO_FATURAMENTO').Value,[] ) then
   begin
      if not qrGrupoFaturamento.Bof then
      begin
         qrGrupoFaturamento.First;
         qrGrupoFaturamento.Prior;
      end;
   end;
}
end;

procedure TfrmCadCliente.edtTipoAtendimentoChange(Sender: TObject);
begin
  inherited;
   if edtTipoAtendimento.Text = '' then
   begin
      tbAtendimentoCliente.Filter   := '';
      tbAtendimentoCliente.Filtered := False;
      Exit;
   end;

   tbAtendimentoCliente.Filter   := 'ATENDIMENTO_CLIENTE.COD_TIPO_ATENDIMENTO = ' + qrTipoAtendimento.FieldByName('COD_TIPO_ATENDIMENTO').AsString;
   tbAtendimentoCliente.Filtered := True;
end;

procedure TfrmCadCliente.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin

   tbAtendimentoCliente.Filter   := '';
   tbAtendimentoCliente.Filtered := False;
   inherited;

end;

procedure TfrmCadCliente.BtAnteriorClick(Sender: TObject);
begin
  inherited;
   AtualizaTela;
end;

procedure TfrmCadCliente.BtProximoClick(Sender: TObject);
begin
  inherited;
   AtualizaTela;
end;

procedure TfrmCadCliente.btnEditarAtendimentoClick(Sender: TObject);
var codAtendimento : Integer;
begin
  inherited;

   if tbAtendimentoCliente.IsEmpty then
   begin
      MessageDlg('Não existem dados a serem editados', mtWarning, [mbOK], 0);
      Exit;
   end;

   frmAtendimentoCliente := TfrmAtendimentoCliente.Create(Application);
   tbAtendimentoCliente.ReadOnly := False;
   tbatendimentoCliente.Edit;

   frmatendimentoCliente.qrTipoAtendimento.Open;
   frmatendimentoCliente.qrTipoAtendimento.Locate('COD_TIPO_ATENDIMENTO',tbAtendimentoCliente.FieldByName('COD_TIPO_ATENDIMENTO').Value , []);
   frmatendimentoCliente.qrSetor.Locate('COD_SETOR',tbAtendimentoCliente.FieldByName('COD_SETOR').Value , []);

   frmatendimentoCliente.ShowModal;
   frmatendimentoCliente.Destroy;
   Screen.OnActiveControlChange := TrocaCor;

   codAtendimento := qrTipoAtendimento.FieldByName('COD_TIPO_ATENDIMENTO').Value;
   qrTipoAtendimento.RefreshAll;
   qrTipoAtendimento.Locate('COD_TIPO_ATENDIMENTO', codAtendimento,[]);
   tbAtendimentoCliente.ReadOnly := True;
end;

procedure TfrmCadCliente.AvisarAtendimentos;
begin
   {============= verifica sE o cliente tem atendimentos a avisar ============}
   frmAvisoAtendimento := TfrmAvisoAtendimento.Create(Application);
   frmAvisoAtendimento.qrAvisoAtendimento.Close;
   frmAvisoAtendimento.qrAvisoAtendimento.ParamByName('cod_cliente').Value := TbPrincipal.FieldByName('cod_cliente').Value;
   frmAvisoAtendimento.qrAvisoAtendimento.Open;

   if frmAvisoAtendimento.qrAvisoAtendimento.IsEmpty then
   begin
      frmAvisoAtendimento.Destroy;
      Screen.OnActiveControlChange := TrocaCor;      
      Exit;
   end;

   frmAvisoAtendimento.qrAvisoAtendimento.First;
   while not frmAvisoAtendimento.qrAvisoAtendimento.Eof do
   begin
      frmAvisoAtendimento.ShowModal;
      frmAvisoAtendimento.qrAvisoAtendimento.Next;
   end;
   frmAvisoAtendimento.qrAvisoAtendimento.Close;
   frmAvisoAtendimento.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadCliente.btnRegistrarAtendimentoClick(Sender: TObject);
var codTipoAtendimento : Integer;
begin
  inherited;
   if TbPrincipal.State in [dssinsert] then
   begin
      if MessageDlg('É necessario salvar os dados antes de cadastrar um atendimento.'+#13+#10+'Deseja salvar os dados agora?', mtConfirmation, [mbYes, mbNo], 0) = mrno then
      begin
         Exit;
      end
      else
        BtGravar.Click;
   end;

   {============= o codigo do usuario sera o atualmente logado no sistema ============}
   frmAtendimentoCliente := TfrmAtendimentoCliente.Create(Application);
   tbatendimentoCliente.ReadOnly := False;
   tbatendimentoCliente.Insert;

   qryPesquisa.Close;
   qryPesquisa.SQL.Clear;
   qryPesquisa.SQL.Add(' SELECT MAX ( COD_ATEND_CLIENTE ) as Valor');
   qryPesquisa.SQL.Add(' FROM ATENDIMENTO_CLIENTE ');
   qryPesquisa.Open;

   tbatendimentoCliente.FieldByName('COD_ATEND_CLIENTE').Value  := qryPesquisa.FieldByName('valor').AsInteger + 1;
   tbatendimentoCliente.FieldByName('CNPJ_CLIENTE').Value       := TbPrincipal.FieldByName('cnpj').Value;
   tbatendimentoCliente.FieldByName('DATA').Value               := Date;
   tbatendimentoCliente.FieldByName('HORA').Value               := Time;
   tbatendimentoCliente.FieldByName('SEQUENCIAL_CLIENTE').Value := TbPrincipal.FieldByName('SEQUENCIAL').Value;
   tbatendimentoCliente.FieldByName('COD_CLIENTE').Value        := TbPrincipal.FieldByName('COD_CLIENTE').Value;
   tbatendimentoCliente.FieldByName('COD_USUARIO').Value        := Dados.qrUsuario.FieldByName('COD_USUARIO').Value ;
   tbatendimentoCliente.FieldByName('AVISAR').Value             := 'F';

   frmAtendimentoCliente.qrSetor.Locate('COD_SETOR', Dados.qrUsuario.FieldByName('COD_SETOR').Value, []);

   frmAtendimentoCliente.ShowModal;
   codTipoAtendimento := frmAtendimentoCliente.qrTipoAtendimento.FieldByName('COD_TIPO_ATENDIMENTO').Value;
   frmatendimentoCliente.Destroy;
   Screen.OnActiveControlChange := TrocaCor;

   qrTipoAtendimento.RefreshAll;
   tbatendimentoCliente.RefreshAll;
   tbatendimentoCliente.ReadOnly := True;
   qrTipoAtendimento.Locate('COD_TIPO_ATENDIMENTO', codTipoAtendimento,[]);
end;

function TfrmCadCliente.VerificaCnpj : Boolean;
var cnpj : string;
begin
   Result := True;
   cnpj := LimpaTexto(edtCnpj.Text);
   qrVerificaSequencial.Close;
   qrVerificaSequencial.ParamByName('CNPJ').Value := cnpj;
   qrVerificaSequencial.Open;
   if qrVerificaSequencial.Locate('CNPJ',cnpj,[]) then
   begin
      BtCancelar.Click;
      TbPrincipal.Locate('COD_CLIENTE',qrVerificaSequencial.FieldByName('COD_CLIENTE').value,[]);
   end;
   qrVerificaSequencial.Close;
end;

procedure TfrmCadCliente.PegarEnderecoTransporte;
begin
  TbPrincipal.FieldByName('endereco_cobranca_bairro').Value      := TbPrincipal.FieldByName('endereco_entrega_bairro').Value;
  TbPrincipal.FieldByName('endereco_cobranca_cep').Value         := TbPrincipal.FieldByName('endereco_entrega_cep').Value;
  TbPrincipal.FieldByName('endereco_cobranca_cidade').Value      := TbPrincipal.FieldByName('endereco_entrega_cidade').Value;
  TbPrincipal.FieldByName('endereco_cobranca_complemento').Value := TbPrincipal.FieldByName('endereco_entrega_complemento').Value;
  TbPrincipal.FieldByName('endereco_cobranca_logradouro').Value  := TbPrincipal.FieldByName('endereco_entrega_logradouro').Value;
  TbPrincipal.FieldByName('endereco_cobranca_numero').Value      := TbPrincipal.FieldByName('endereco_entrega_numero').Value;
  TbPrincipal.FieldByName('endereco_cobranca_tipo').Value        := TbPrincipal.FieldByName('endereco_entrega_tipo').Value;
  TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value      := TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value;
end;

procedure TfrmCadCliente.BtExcluirClick(Sender: TObject);
begin
   descricao_auditoria := 'EXCLUIU O CLIENTE ' + TbPrincipal.FieldByName('RAZAOSOCIAL').AsString + ' CPF/CNPJ ' + TbPrincipal.FieldByName('CNPJ').AsString;
   inherited;
   if edpesquisa.Text = '' then
   begin
      edPesquisa.OnChange(Self);
   end;
    tbprincipal.FieldByName('cnpj').EditMask := '';
   AtualizaTela;
end;

procedure TfrmCadCliente.BitBtn1Click(Sender: TObject);
begin
   inherited;
   BtEditar.Click;
   pgcOutros.ActivePage := tabEnderecos;
   pgcEnderecos.ActivePage := tabEntrega;
end;

procedure TfrmCadCliente.BitBtn2Click(Sender: TObject);
begin
   inherited;
   BtEditar.Click;
   pgcOutros.ActivePage := tabEnderecos;
   pgcEnderecos.ActivePage := tabCobranca;
end;

procedure TfrmCadCliente.BitBtn4Click(Sender: TObject);
begin
   inherited;
   BtEditar.Click;
   pgcOutros.ActivePage := tabAtendimento;
end;

procedure TfrmCadCliente.edtContatoCobrancaExit(Sender: TObject);
begin
  inherited;
   edtInscricao.SetFocus;
end;

procedure TfrmCadCliente.rdbTodasClick(Sender: TObject);
begin
  inherited;
   qrPedido.Close;
   qrPedido.SQLWhere.Clear;
   qrPedido.SQLWhere.Add(' where Pedidos.cod_cliente = ' + #39+TbPrincipal.FieldByName('cod_cliente').AsString+#39 );
   qrPedido.Open;
end;

procedure TfrmCadCliente.rdb_5_DiasClick(Sender: TObject);
begin
  inherited;
   qrPedido.Close;
   qrPedido.SQLWhere.Clear;
   qrPedido.SQLWhere.Add(' where pedidos.cod_cliente = ' + #39+TbPrincipal.FieldByName('cod_cliente').AsString+ #39);
   qrPedido.SQLWhere.Add(' and pedidos.data_cadastro >= ' + #39 +FormatDateTime('dd.mm.yyyy',Date-5) + #39 );
   qrPedido.Open;
end;

procedure TfrmCadCliente.rdb_15_diasClick(Sender: TObject);
begin
  inherited;
   qrPedido.Close;
   qrPedido.SQLWhere.Clear;
   qrPedido.SQLWhere.Add(' where pedidos.cod_cliente = ' + #39+TbPrincipal.FieldByName('cod_cliente').AsString + #39);
   qrPedido.SQLWhere.Add(' and pedidos.data_cadastro >= ' + #39 +FormatDateTime('dd.mm.yyyy',Date-15) + #39 );
   qrPedido.Open;
end;

procedure TfrmCadCliente.rdb_30_diasClick(Sender: TObject);
begin
  inherited;
   qrPedido.Close;
   qrPedido.SQLWhere.Clear;
   qrPedido.SQLWhere.Add(' where pedidos.cod_cliente = ' + #39+TbPrincipal.FieldByName('cod_cliente').AsString + #39);
   qrPedido.SQLWhere.Add(' and pedidos.data_cadastro >= ' + #39 +FormatDateTime('dd.mm.yyyy',Date-30) + #39 );
   qrPedido.Open;
end;

procedure TfrmCadCliente.BitBtn5Click(Sender: TObject);
begin
   inherited;
   BtEditar.Click;
   pgcOutros.ActivePage := tabPedido;
   rdb_5_Dias.Checked := False;
   rdb_5_Dias.Checked := True;
end;

procedure TfrmCadCliente.btnVoltarClick(Sender: TObject);
begin
   if edpesquisa.Text = '' then
   begin
      edPesquisa.OnChange(Self);
   end;
   tbprincipal.FieldByName('cnpj').EditMask := '';
   tbprincipal.Refresh;
   inherited;
end;

procedure TfrmCadCliente.btnEditar2Click(Sender: TObject);
begin
  inherited;

   if TbPrincipal.FieldByName('CNPJ').AsString <> '' then
      edtCnpj.ReadOnly:=True
   else
      edtCnpj.ReadOnly:=False;


  pnlIdentificadores.Visible:=BtGravar.Visible;
end;

procedure TfrmCadCliente.pgcOutrosChange(Sender: TObject);
begin
  inherited;
   if pgcOutros.ActivePage = tabPedido then
   begin
      rdb_5_Dias.Checked := False;
      rdb_5_Dias.Checked := True;
   end;

   if pgcOutros.ActivePage = tabEnderecos then
   begin
      try
         pgcEnderecos.ActivePage := tabEntrega;
         except
      end;
   end;
end;

procedure TfrmCadCliente.edtTele1Exit(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     exit;

   if ValidarTelefone(edtTele1.Text) = False then
   begin
     MessageDlg('Telefone inválido', mtWarning, [mbOK], 0);
     edtTele1.SetFocus;
     edtTele1.SelectAll;
     Exit;
   end;
end;

procedure TfrmCadCliente.edtTele2Exit(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     exit;

   if ValidarTelefone(edtTele2.Text) = False then
   begin
     MessageDlg('Telefone inválido', mtWarning, [mbOK], 0);
     edtTele2.SetFocus;
     edtTele2.SelectAll;
     Exit;
   end;

end;

procedure TfrmCadCliente.MontaMascaraCliente;
begin
   //================= monta a mascara do cpf ou cnpj ==============
   if Length(TbPrincipal.FieldByName('CNPJ').AsString) = 11 then
   begin
      tbprincipal.FieldByName('CNPJ').EditMask := '999\.999\.999\-99;0';
      edtCnpj.AutoLabel.Caption := 'CPF';
   end
   else
   if Length(TbPrincipal.FieldByName('CNPJ').AsString) = 14 then
   begin
      tbprincipal.FieldByName('CNPJ').EditMask := '99\.999\.999\/9999\-99;0';
      edtCnpj.AutoLabel.Caption := 'CNPJ';
   end
   else
   begin
      tbprincipal.FieldByName('CNPJ').EditMask := '';
      edtCnpj.AutoLabel.Caption := 'CPF/CNPJ';
   end;
end;

procedure TfrmCadCliente.dsrPedidoStateChanged(Sender: TIB_DataSource;
  ADataset: TIB_Dataset);
begin
  inherited;
   lblTotalColeta.Caption := 'Total ' + IntToStr(qrPedido.RecordCount);
end;

procedure TfrmCadCliente.dsrAtendimentoClienteStateChanged(
  Sender: TIB_DataSource; ADataset: TIB_Dataset);
begin
  inherited;
    lblTotalAtendimento.Caption := 'Total ' + IntToStr(tbAtendimentoCliente.RecordCount);
end;

procedure TfrmCadCliente.FormCreate(Sender: TObject);
begin
   Chave_Tabela := 'COD_CLIENTE';
   Gera_Codigo:=True;
   inherited;
   qrTabela.Open;
   qryVendedor.Open;

   qrTipoAtendimento.Open;
   if not qrTipoAtendimento.Bof then
   begin
      qrTipoAtendimento.First;
      qrTipoAtendimento.Prior;
   end;

   Dados.tbParametro_Cliente.Open;
//   Dados.tbParametro_Fornecedor.Open;
   qrStatus.Open;
   qryPraca.Open;
   qrCnae.Open;
   qrUF_Transporte.Open;
   qrUF_Cobranca.Open;
   qrGrupoFaturamento.Open;
   qryClassificacaoClientes.Open;

   Cliente_Corporativo := False;
   Cliente_Exterior    := False;
   pgcOutros.ActivePage := tabEnderecos;
   pgcEnderecos.ActivePage := tabEntrega;
end;

procedure TfrmCadCliente.btnPedidoNovoClick(Sender: TObject);
begin
  inherited;
   frmPedidos := TfrmPedidos.Create(Application);
   frmPedidos.OutraTela := True;
   frmPedidos.Consulta  := True;
   frmPedidos.BtInserir.Click;
   frmPedidos.qryCliente.Locate('COD_CLIENTE',TbPrincipal.FieldByName('COD_CLIENTE').Value,[]);
   frmPedidos.TbPrincipal.FieldByName('COD_CLIENTE').Value:=TbPrincipal.FieldByName('COD_CLIENTE').Value;
   frmPedidos.ShowModal;
   frmPedidos.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrPedido.RefreshAll;
end;

procedure TfrmCadCliente.EditarPedidoClick(Sender: TObject);
begin
  inherited;
   if qrPedido.IsEmpty then
   begin
      MessageDlg('Não existem Pedidos a serem detalhados', mtWarning, [mbOK], 0);
      Exit;
   end;

   frmPedidos := TfrmPedidos.Create(Application);
   frmPedidos.OutraTela := True;
   frmPedidos.Consulta  := True;
   frmPedidos.TbPrincipal.Locate('COD_PEDIDO',qrPedido.FieldByName('COD_PEDIDO').Value,[]);
   frmPedidos.BtEditar.Click;
   frmPedidos.ShowModal;
   frmPedidos.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrPedido.RefreshAll;
end;

procedure TfrmCadCliente.edtObsTransporteKeyPress(Sender: TObject;
  var Key: Char);
begin
  inherited;
   Key := UpCase(KEY);
end;

procedure TfrmCadCliente.edtObsCobrancaKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
   Key := UpCase(KEY);
end;

function TfrmCadCliente.VerificaHorario: Boolean;
begin
   //================= Verifica os horarios de funcionamento da empresa ==============

   Result := True;
   if TbPrincipal.FieldByName('ABRE').IsNotNull then
   begin
      if (TbPrincipal.FieldByName('INICIO_ALMOCO').IsNotNull) then
      begin
         if  TbPrincipal.FieldByName('ABRE').AsDateTime > TbPrincipal.FieldByName('INICIO_ALMOCO').AsDateTime then
         begin
            MessageDlg('A hora de abertura não pode ser menor que '+#13+#10+'O horário de início do almoço', mtWarning, [mbOK], 0);
            pgcOutros.ActivePage := tabEnderecos;
            pgcEnderecos.ActivePage := tabEntrega;
            edtAbertura.SetFocus;
            Result := False;
            Exit;
         end;
      end;

      if (TbPrincipal.FieldByName('FIM_ALMOCO').IsNotNull) then
      begin
         if  TbPrincipal.FieldByName('ABRE').AsDateTime > TbPrincipal.FieldByName('FIM_ALMOCO').AsDateTime then
         begin
            MessageDlg('A hora de abertura não pode ser menor que '+#13+#10+'O horário de início do almoço', mtWarning, [mbOK], 0);
            pgcOutros.ActivePage := tabEnderecos;
            pgcEnderecos.ActivePage := tabEntrega;
            edtAbertura.SetFocus;
            Result := False;
            Exit;
         end;
      end;
   end;

   if TbPrincipal.FieldByName('INICIO_ALMOCO').IsNotNull then
   begin
      if TbPrincipal.FieldByName('FIM_ALMOCO').IsNotNull then
      begin
         if TbPrincipal.FieldByName('INICIO_ALMOCO').AsDateTime > TbPrincipal.FieldByName('FIM_ALMOCO').AsDateTime then
         begin
            MessageDlg('A hora de início de almoço não pode ser menor que'+#13+#10+'O horário de fim do almoço', mtWarning, [mbOK], 0);
            pgcOutros.ActivePage := tabEnderecos;
            pgcEnderecos.ActivePage := tabEntrega;
            edtAlmocoInicio.SetFocus;
            Result := False;
            Exit;
         end;
      end;
   end;

end;

procedure TfrmCadCliente.ProtegeDadosPorSetor;
begin
   //================= Cada usuario altera os dados de acordo com o setor cadastrado ==============

    //================= Setor de transporte ==============
   if Dados.qrUsuario.FieldByName('COD_SETOR').AsInteger = 1 then
   begin
      edtObsTransporte.ReadOnly := False;
      edtTabela.ReadOnly        := False;
      edtObsCobranca.ReadOnly   := True;
      edtGrupoFaturamento.ReadOnly         := True;
   end;

    //================= Setor de faturamento ==============
   if Dados.qrUsuario.FieldByName('COD_SETOR').AsInteger = 2 then
   begin
      edtObsTransporte.ReadOnly := True ;
      edtTabela.ReadOnly        := True;
      edtObsCobranca.ReadOnly   := False;
      edtGrupoFaturamento.ReadOnly := False;
   end;
end;


procedure TfrmCadCliente.PesquisarCEP1Click(Sender: TObject);
var cidade,endereco,bairro,cep,uf,cod_cidade_IBGE,cod_UF_IBGE : string;
begin
   inherited;
   if TbPrincipal.State in [dssBrowse] then
      Exit;

   BuscaCepPorCidadeRua(cidade,endereco,bairro,cep,uf,cod_cidade_IBGE,cod_UF_IBGE);
   if cidade <> '' then
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_CIDADE').value     := cidade;

   if endereco <> '' then
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_LOGRADOURO').value := endereco;

   if bairro <> '' then
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_BAIRRO').Value := bairro;

   if cep <> '' then
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_CEP').Value := cep;

   if uf <> '' then
   begin
      if qrUF_Transporte.Locate('DESCRICAO' , uf  , [] ) then
         TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value := qrUF_Transporte.FieldByName('COD_UF').Value
      else
         TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value := Null;
   end;

   if cod_cidade_IBGE <> '' then
      TbPrincipal.FieldByName('COD_MUNICIPIO_IBGE').Value := cod_cidade_IBGE;

   if cod_UF_IBGE <> '' then
      TbPrincipal.FieldByName('COD_UF_IBGE').Value := cod_UF_IBGE;

   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadCliente.PesquisaCEP1Click(Sender: TObject);
var cidade,endereco,bairro,cep,uf,cod_cidade_IBGE,cod_UF_IBGE : string;
begin
   inherited;
   if TbPrincipal.State in [dssBrowse] then
      Exit;

   BuscaCepPorCidadeRua(cidade,endereco,bairro,cep,uf,cod_cidade_IBGE,cod_uf_IBGE);
   if cidade <> '' then
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_CIDADE').value     := cidade;

   if endereco <> '' then
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_LOGRADOURO').value := endereco;

   if bairro <> '' then
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_BAIRRO').Value := bairro;

   if cep <> '' then
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_CEP').Value := cep;

   if uf <> '' then
   begin
      if qrUF_Cobranca.Locate('DESCRICAO' , uf  , [] ) then
         TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value := qrUF_Cobranca.FieldByName('COD_UF').Value
      else
         TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value := Null;
   end;

   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadCliente.Cadastrodestatus1Click(Sender: TObject);
var cod : Integer;
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     Exit;

   frmCadStatusCliente := TfrmCadStatusCliente.Create(Application);
   frmCadStatusCliente.OutraTela := True;
   frmCadStatusCliente.BtInserirClick(Self);
   frmCadStatusCliente.ShowModal;
   cod := frmCadStatusCliente.TbPrincipal.FieldByName('COD_STATUS').AsInteger;
   frmCadStatusCliente.Destroy;
   Screen.OnActiveControlChange := TrocaCor;   

   qrStatus.RefreshAll;
   if NOT qrStatus.Locate('COD_STATUS',COD,[]) then
   if not qrStatus.Bof then
   begin
      qrStatus.First;
      qrStatus.Prior;
   end;
end;

procedure TfrmCadCliente.edtStatusExit(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
   begin
      AtualizaTela;
   end;
end;

procedure TfrmCadCliente.edtCepTransporteKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtCepTransporte.Focused )then
      PesquisarCEP1.Click;
end;

procedure TfrmCadCliente.edtCepCobrancaKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtCepCobranca.Focused )then
      PesquisaCEP1.Click;
end;

procedure TfrmCadCliente.PesquiarStatus1Click(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     Exit;

   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrStatus;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Status de Clientes';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrStatus.Locate('COD_STATUS', frmModeloPesquisa.TbPrincipal.FieldByName('COD_STATUS').Value ,[]);
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadCliente.edtStatusKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     Exit;

   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtStatus.Focused) then
      PesquiarStatus1Click(Self);
end;

function TfrmCadCliente.VerificaCamposObrigatorios: Boolean;
begin
   //=============== Verifica na tabela de parametros do Cliente quais campos sao obrigatorios ================
   Result := False;
   if Dados.tbParametro_Cliente.FieldByName('CNPJ_OBRIG').AsString = 'T' then
   begin
      if edtCnpj.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o CNPJ/CPF do cliente', mtWarning, [mbOK], 0);
         edtCnpj.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('INSCRICAO_OBRIG').AsString = 'T' then
   begin
      if edtInscricao.Field.AsString = '' then
      begin
         MessageDlg('Informe o número da inscrição estadual', mtWarning, [mbOK], 0);
         edtInscricao.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('TABELA_OBRIG').AsString = 'T' then
   begin
      if edtTabela.Text = '' then
      begin
         MessageDlg('Não foi informado a tabela de cálculo do cliente.', mtWarning, [mbOK], 0);
         edtTabela.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('NOME_FANTASIA_OBRIG').AsString = 'T' then
   begin
      if edtNomeFantasia.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o nome fantasia', mtWarning, [mbOK], 0);
         edtNomeFantasia.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('TELE1_OBRIG').AsString = 'T' then
   begin
      if edtTele1.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o Telefone 1', mtWarning, [mbOK], 0);
         edtTele1.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('TELE2_OBRIG').AsString = 'T' then
   begin
      if edtTele2.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o Telefone 1', mtWarning, [mbOK], 0);
         edtTele2.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('EMAIL_OBRIG').AsString = 'T' then
   begin
      if edtEmail.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o E-Mail', mtWarning, [mbOK], 0);
         edtEmail.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('CNAE_OBRIG').AsString = 'T' then
   begin
      if edtCnae.Text = '' then
      begin
         MessageDlg('É obrigatório informar o Código CNAE', mtWarning, [mbOK], 0);
         edtCnae.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('CEP_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtCepTransporte.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o número do CEP de entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtCepTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('ENDERECO_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtEnderecoTransporte.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o endereço de entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtEnderecoTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('NUMERO_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtNumeroTransporte.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o número do endereço de entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtNumeroTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('COMPLEMENTO_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtComplementoTransporte.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o complemento do endereço de entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtComplementoTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('BAIRRO_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtBairroTransporte.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o bairro do endereço de entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtBairroTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('CIDADE_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtCidadeTransporte.Field.AsString =  '' then
      begin
         MessageDlg('É obrigatório informar a cidade do endereço de entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtBairroTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('ESTADO_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtUfTransporte.Text = '' then
      begin
         MessageDlg('É obrigatório informar o UF do endereço de entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtUfTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('CONTATO_ENTREGA_OBRIG').AsString = 'T' then
   begin
      if edtContatoTransporte.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o contato para entrega', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtContatoTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Cliente.FieldByName('TABELA_OBRIG').AsString = 'T' then
   begin
      if edtTabela.Text = '' then
      begin
         MessageDlg('É obrigatório informar a tabela de cálculo', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtTabela.SetFocus;
         Exit;
      end;
   end;

    if Dados.tbParametro_Cliente.FieldByName('HORARIO_FUNC_OBRIG').AsString = 'T' then
    begin
       if (edtAbertura.Field.AsString = '') or (edtAlmocoInicio.Field.AsString = '') or (edtAlmocoFim.Field.AsString = '') or (edtFechamento.Field.AsString = '') then
       begin
         MessageDlg('É obrigatório informar os horários de funcionamento', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtAbertura.SetFocus;
         Exit;
       end;
    end;

    if Dados.tbParametro_Cliente.FieldByName('OBS_ENTREGA_OBRIG').AsString = 'T' then
    begin
       if Trim(edtObsTransporte.Field.AsString) = '' then
       begin
         MessageDlg('É obrigatório informar uma observação para transporte', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabEntrega;
         edtObsTransporte.SetFocus;
         Exit;
       end;
    end;

    if Dados.tbParametro_Cliente.FieldByName('CEP_COBRAN_OBRIG').AsString = 'T' then
    begin
      if edtCepCobranca.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o número do cep de cobrança', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabCobranca;
         edtCepCobranca.SetFocus;
         Exit;
      end;
    end;

   if Dados.tbParametro_Cliente.FieldByName('ENDERECO_COBRAN_OBRIG').AsString = 'T' then
   begin
      if edtEnderecoTransporte.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o endereço de cobrança', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabCobranca;
         edtEnderecoCobranca.SetFocus;
         Exit;
      end;
   end;

    if Dados.tbParametro_Cliente.FieldByName('NUMERO_COBRAN_OBRIG').AsString = 'T' then
    begin
      if edtNumeroCobranca.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o número para cobrança', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabCobranca;
         edtNumeroCobranca.SetFocus;
         Exit;
      end;
    end;

    if dados.tbParametro_Cliente.FieldByName('COMPLEMENTO_COBRAN_OBRIG').AsString = 'T' then
    begin
       if edtComplementoCobranca.Field.AsString = '' then
       begin
         MessageDlg('É obrigatório informar o complemento para cobrança', mtWarning, [mbOK], 0);
         pgcOutros.ActivePage    := tabEnderecos;
         pgcEnderecos.ActivePage := tabCobranca;
         edtComplementoCobranca.SetFocus;
         Exit;
       end;
    end;

    if Dados.tbParametro_Cliente.FieldByName('BAIRRO_COBRAN_OBRIG').AsString = 'T' then
    begin
       if edtBairroCobranca.Field.AsString = '' then
       begin
          MessageDlg('É obrigatório informar o bairro para cobrança', mtWarning, [mbOK], 0);
          pgcOutros.ActivePage    := tabEnderecos;
          pgcEnderecos.ActivePage := tabCobranca;
          edtBairroCobranca.SetFocus;
          Exit;
       end;
    end;

    if Dados.tbParametro_Cliente.FieldByName('CIDADE_COBRAN_OBRIG').AsString = 'T' then
    begin
       if edtCidadeCobranca.Field.AsString = '' then
       begin
          MessageDlg('É obrigatório informar a cidade para cobrança', mtWarning, [mbOK], 0);
          pgcOutros.ActivePage    := tabEnderecos;
          pgcEnderecos.ActivePage := tabCobranca;
          edtCidadeCobranca.SetFocus;
          Exit;
       end;
    end;

    if Dados.tbParametro_Cliente.FieldByName('ESTADO_COBRAN_OBRIG').AsString = 'T' then
    begin
       if edtUfCobranca.Text = '' then
       begin
          MessageDlg('É obrigatório informar a UF para cobrança', mtWarning, [mbOK], 0);
          pgcOutros.ActivePage    := tabEnderecos;
          pgcEnderecos.ActivePage := tabCobranca;
          edtUfCobranca.SetFocus;
          Exit;
       end;
    end;

    if Dados.tbParametro_Cliente.FieldByName('CONTATO_COBRAN_OBRIG').AsString = 'T' then
    begin
       if edtContatoCobranca.Field.AsString = '' then
       begin
          MessageDlg('É obrigatório informar o contato para cobrança', mtWarning, [mbOK], 0);
          pgcOutros.ActivePage    := tabEnderecos;
          pgcEnderecos.ActivePage := tabCobranca;
          edtBairroCobranca.SetFocus;
          Exit;
       end;
    end;

{    if Dados.tbParametro_Cliente.FieldByName('TIPO_COBRAN_OBRIG').AsString = 'T' then
    begin
       if TbPrincipal.FieldByName('COD_GRUPO_FATURAMENTO').IsNull  then
       begin
          MessageDlg('É obrigatório informar o tipo de cobrança', mtWarning, [mbOK], 0);
          pgcOutros.ActivePage    := tabEnderecos;
          pgcEnderecos.ActivePage := tabCobranca;
          edtGrupoFaturamento.SetFocus;
          Exit;
       end;
    end;}

    if Dados.tbParametro_Cliente.FieldByName('OBS_COBRAN_OBRIG').AsString = 'T' then
    begin
       if edtObsCobranca.Field.AsString = '' then
       begin
          MessageDlg('É obrigatório informar uma observação para cobrança', mtWarning, [mbOK], 0);
          pgcOutros.ActivePage    := tabEnderecos;
          pgcEnderecos.ActivePage := tabCobranca;
          edtObsCobranca.SetFocus;
          Exit;
       end;
    end;


    Result := True;
end;

procedure TfrmCadCliente.edtCnaeKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     Exit;
   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtCnae.Focused) then
   begin
      if TbPrincipal.State in [dssBrowse] then
        Exit;

      frmModeloPesquisa                   := TfrmModeloPesquisa.Create(Application);
      frmModeloPesquisa.Tabela            := qrCnae;
      frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Código CNAE';
      if frmModeloPesquisa.ShowModal = mrok then
      begin
         qrCnae.Locate('COD_CNAE', frmModeloPesquisa.TbPrincipal.FieldByName('COD_CNAE').Value ,[]);
      end;
      frmModeloPesquisa.Destroy;
      Screen.OnActiveControlChange := TrocaCor;
   end;
end;

procedure TfrmCadCliente.btnPesquisaVendedorClick(Sender: TObject);
begin
  inherited;
   //==================== Pesquisa setores ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qryVendedor;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Vendedores';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qryVendedor.Locate('COD_VENDEDOR', frmModeloPesquisa.TbPrincipal.FieldByName('COD_VENDEDOR').Value ,[]);
      dbCodigoVendedor.Text := frmModeloPesquisa.TbPrincipal.FieldByName('COD_VENDEDOR').AsString;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadCliente.btnNovoContatoClick(Sender: TObject);
var Readonly: Boolean;
codigo : Integer;
begin
  inherited;
   qryPesquisa.Close;
   qryPesquisa.SQL.Clear;
   qryPesquisa.SQL.Add(' SELECT MAX ( CONTATO_CLIENTE.CODIGO ) as valor ');
   qryPesquisa.SQL.Add(' FROM CONTATO_CLIENTE ');
   qryPesquisa.Open;

   codigo := qryPesquisa.FieldByName('valor').AsInteger + 1;

   Readonly := qrContatos.Readonly;
   qrContatos.ReadOnly := False;
   qrContatos.Insert;
   qrContatos.FieldByName('CODIGO').Value      := codigo;
   qrContatos.FieldByName('COD_CLIENTE').Value := TbPrincipal.FieldByName('COD_CLIENTE').Value;

   frmContatoCliente := TfrmContatoCliente.Create(Application);
   if frmContatoCliente.ShowModal = mrOk then
   begin
      if TbPrincipal.State in [dssInsert] then
         TbPrincipal.PostRetaining;
      qrContatos.Post
   end
   else
      qrContatos.Cancel;
   frmContatoCliente.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrContatos.ReadOnly := Readonly;
end;

procedure TfrmCadCliente.btnDetalharContatoClick(Sender: TObject);
var Readonly: Boolean;
begin
  inherited;
   if qrContatos.IsEmpty then
      Exit;

   Readonly := qrContatos.Readonly;
   qrContatos.ReadOnly := False;
   qrContatos.Edit;

   frmContatoCliente := TfrmContatoCliente.Create(Application);
   if frmContatoCliente.ShowModal = mrOk then
   begin
      if TbPrincipal.State in [dssInsert] then
         TbPrincipal.PostRetaining;
      qrContatos.Post
   end
   else
      qrContatos.Cancel;
   frmContatoCliente.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrContatos.ReadOnly := Readonly;
end;
procedure TfrmCadCliente.btnEcluirContatoClick(Sender: TObject);
var Readonly: Boolean;
begin
  inherited;
   if (MessageDlg('Deseja realmente excluir o registro selecionado?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
      Exit;

   Readonly := qrContatos.Readonly;
   qrContatos.ReadOnly := False;
   qrContatos.Delete;
   qrContatos.ReadOnly := Readonly;
end;

procedure TfrmCadCliente.IB_Grid4CellDblClick(Sender: TObject; ACol,
  ARow: Integer; AButton: TMouseButton; AShift: TShiftState);
begin
  inherited;
   btnDetalharContato.Click;
end;

procedure TfrmCadCliente.btnPesquisaTabelaClick(Sender: TObject);
begin
  inherited;
     //==================== se campo tabela nao disponivel o pesquisa nao funciona  =============
   if edtTabela.Enabled = False then
      Exit;
   //==================== Pesquisa setores ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrTabela;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Tabela Cálculo';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrTabela.Locate('COD_TABELA', frmModeloPesquisa.TbPrincipal.FieldByName('COD_TABELA').Value ,[]);
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadCliente.edtTabelaKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtTabela.Focused )then
      btnPesquisaTabela.Click;
end;

procedure TfrmCadCliente.CondicoesEndereco;
begin
  if tbPrincipal.FieldByName('ENDERECO_ENTREGA_NUMERO').Value = Null
  then tbPrincipal.FieldByName('ENDERECO_ENTREGA_NUMERO').Value:=' ';

  if tbPrincipal.FieldByName('ENDERECO_ENTREGA_COMPLEMENTO').Value = Null
  then tbPrincipal.FieldByName('ENDERECO_ENTREGA_COMPLEMENTO').Value:=' ';

  if tbPrincipal.FieldByName('ENDERECO_ENTREGA_TIPO').Value = Null
  then tbPrincipal.FieldByName('ENDERECO_ENTREGA_TIPO').Value:=' ';

  if tbPrincipal.FieldByName('ENDERECO_ENTREGA_LOGRADOURO').Value = Null
  then tbPrincipal.FieldByName('ENDERECO_ENTREGA_LOGRADOURO').Value:=' ';

  if TbPrincipal.FieldByName('COD_MUNICIPIO_IBGE').IsNull
  then TbPrincipal.FieldByName('COD_UF_IBGE').Value:=CodUF_IBGE(qrUF_Transporte.FieldByName('DESCRICAO').AsString);

end;

procedure TfrmCadCliente.btnIncluirIdentificadorClick(Sender: TObject);
begin
  inherited;
  qryItentificadores.Insert;
  btnSalvaIdentificador.Visible:=True;
  btnCancelaIdentificador.Visible:=True;
  grdItentificadores.ReadOnly:=False;
  grdItentificadores.SetFocus;
end;

procedure TfrmCadCliente.btnCancelaIdentificadorClick(Sender: TObject);
begin
  inherited;
  qryItentificadores.Cancel;
  grdItentificadores.ReadOnly:=True;
  btnSalvaIdentificador.Visible:=False;
  btnCancelaIdentificador.Visible:=False;
end;

procedure TfrmCadCliente.btnSalvaIdentificadorClick(Sender: TObject);
begin
  inherited;
  qryItentificadores.FieldByName('COD_CLIENTE').Value:=TbPrincipal.FieldByName('COD_CLIENTE').Value;
  qryItentificadores.Post;
  grdItentificadores.ReadOnly:=True;
  btnSalvaIdentificador.Visible:=False;
  btnCancelaIdentificador.Visible:=False;
end;

procedure TfrmCadCliente.btnRetirarItemClick(Sender: TObject);
begin
  inherited;
  qryItentificadores.Delete;
end;

procedure TfrmCadCliente.IB_Grid2DblClick(Sender: TObject);
begin
  inherited;
  EditarPedido.Click;
end;

procedure TfrmCadCliente.dbCodigoVendedorExit(Sender: TObject);
begin
  inherited;
  //================= Se Estiver em modo de visualizacao nao faz nada ==============
  if tbprincipal.state in [dssBrowse] then
    Exit;

  if dbCodigoVendedor.Text <> '' then
  begin
    if NOT qryVendedor.Locate('COD_VENDEDOR',tbPrincipal.FieldByName('COD_VENDEDOR').Value,[]) then
    begin
      if (MessageDlg('Vendedor não cadastrado! Deseja cadastrar?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
        CadastrarVendedor;
    end;
  end;
  AtualizaTela;

end;

procedure TfrmCadCliente.btnIncluiVendedorClick(Sender: TObject);
begin
  inherited;
  frmCadVendedor := TfrmCadVendedor.Create(Application);
  frmCadVendedor.OutraTela := True;
  frmCadVendedor.BtInserirClick(Self);
  frmCadVendedor.ShowModal;

   //============== Localiza a nova forma de pagamento cadastrado ============

  tbPrincipal.FieldByName('COD_VENDEDOR').Value:=frmCadVendedor.TbPrincipal.FieldByName('COD_VENDEDOR').Value;
  frmCadVendedor.Destroy;
  qryVendedor.RefreshAll;
  AtualizaTela;
  Screen.OnActiveControlChange := TrocaCor;
end;

function TfrmCadCliente.CadastrarVendedor:Boolean;
begin
  frmCadVendedor := TfrmCadVendedor.Create(Application);
  frmCadVendedor.OutraTela := True;
  frmCadVendedor.BtInserirClick(Self);
  frmCadVendedor.ShowModal;

   //============== Localiza a nova forma de pagamento cadastrado ============

  tbPrincipal.FieldByName('COD_VENDEDOR').Value:=frmCadVendedor.TbPrincipal.FieldByName('COD_VENDEDOR').Value;
  frmCadVendedor.Destroy;
  qryVendedor.RefreshAll;
  AtualizaTela;
  Screen.OnActiveControlChange := TrocaCor;
end;

function TfrmCadCliente.VerificaPracaPagamento:Boolean;
begin
{
  if ((TbPrincipal.FieldByName('ENDERECO_ENTREGA_TIPO').AsString       <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_TIPO').AsString)
  OR (TbPrincipal.FieldByName('ENDERECO_ENTREGA_NUMERO').AsString      <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_NUMERO').AsString)
  OR (TbPrincipal.FieldByName('ENDERECO_ENTREGA_BAIRRO').AsString      <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_BAIRRO').AsString)
  OR (TbPrincipal.FieldByName('ENDERECO_ENTREGA_CEP').AsString         <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_CEP').AsString)
  OR (TbPrincipal.FieldByName('ENDERECO_ENTREGA_CIDADE').AsString      <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_CIDADE').AsString)
  OR (TbPrincipal.FieldByName('ENDERECO_ENTREGA_LOGRADOURO').AsString  <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_LOGRADOURO').AsString)
  OR (TbPrincipal.FieldByName('ENDERECO_ENTREGA_COMPLEMENTO').AsString <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_COMPLEMENTO').AsString)
  OR (TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').AsString      <> TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').AsString)) then
  begin
    case MessageDlg('ENDEREÇO DE ENTREGA e LOCAL DE COBRNÇA são diferentes.'+#13+#10+'Deseja manter desta forma?', mtConfirmation, [mbYes, mbNo, mbCancel], 0) of
      mrYes: Result:=True;
      mrNo: PegarEnderecoTransporte;
      mrCancel: Result:=False;
    end;
  end;
 }
 PegarEnderecoTransporte;
 Result := True;
end;

procedure TfrmCadCliente.BitBtn7Click(Sender: TObject);
begin
  inherited;
   frmModeloPesquisa := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.lblTitulo.Caption := 'Pesquisa Grupo de Faturamento';
   frmModeloPesquisa.Tabela := qrGrupoFaturamento;
   if frmModeloPesquisa.ShowModal = mrOk then
      qrGrupoFaturamento.Locate('COD_GRUPO_FATURAMENTO' , frmModeloPesquisa.TbPrincipal.FieldByName('COD_GRUPO_FATURAMENTO').Value , []);

   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadCliente.btnPesquisaReceitaFederalClick(Sender: TObject);
begin
  inherited;
  if (tbPrincipal.FieldByName('TIPO_CADASTRO').AsString = 'J') then
    BuscaDados;
end;

function TfrmCadCliente.BuscaDados : boolean;
var Consulta_dados : TConsulta_Dados_Cadastrais;
   mesmo_endereco : Boolean;
begin
   Consulta_dados := TConsulta_Dados_Cadastrais.Create;
   Consulta_dados.Cnpj := TbPrincipal.FieldByName('cnpj').AsString;


   Consulta_dados.Selecionar_Local_consulta := False;
   Consulta_dados.Tabela_Relacionada := 'CLIENTE';
   Consulta_dados.Cod_Tabela_Relacionada := TbPrincipal.FieldByName('cnpj').AsString;

   try
      if Consulta_dados.Realizar_Consulta = False then
      begin
         Result := false;
         Consulta_dados.Destroy;
         Exit;
      end
      else
        Result := True;
    except on E: Exception do
    begin
      showmessage(e.message);
         Result := false;
         Consulta_dados.Destroy;
         Exit;
    end;

   end;

   if Consulta_dados.Situacao_Cadastral <> qrStatus.FieldByName('DESCRICAO').AsString then
   begin
     if qrStatus.Locate('DESCRICAO', Consulta_dados.Situacao_Cadastral, [] ) then
     begin
       tbPrincipal.FieldByName('COD_STATUS').Value := qrStatus.FieldbyName('COD_STATUS').AsInteger;
     end
     else
        MessageDlg('Esta situação cadastral '+ Consulta_dados.Situacao_Cadastral +' na RECEITA FEDERAL não está cadastrada no sistema', mtWarning, [mbOK], 0);
   end;

   TbPrincipal.FieldByName('RAZAOSOCIAL').AsString  := Consulta_dados.Razaosocial;
   TbPrincipal.FieldByName('NOMEFANTASIA').AsString := Consulta_dados.Nomefantasia;
   TbPrincipal.FieldByName('COD_CNAE').AsString     := Consulta_dados.Cnae;

    if qrCnae.Locate('COD_CNAE', Consulta_dados.Cnae , [] ) = FALSE then
    begin
       InicioDaTabela(qrCnae);
       TbPrincipal.FieldByName('COD_CNAE').Value := null;
    end;

   TbPrincipal.FieldByName('ENDERECO_ENTREGA_CEP').AsString         := Consulta_dados.Endereco_Cep;
   TbPrincipal.FieldByName('ENDERECO_ENTREGA_LOGRADOURO').AsString  := Consulta_dados.Endereco_Logradouro;
   TbPrincipal.FieldByName('ENDERECO_ENTREGA_NUMERO').AsString      := Consulta_dados.Endereco_Numero;
   TbPrincipal.FieldByName('ENDERECO_ENTREGA_COMPLEMENTO').AsString := Consulta_dados.Endereco_Complemento;
   TbPrincipal.FieldByName('ENDERECO_ENTREGA_BAIRRO').AsString      := Consulta_dados.Endereco_Bairro;
   TbPrincipal.FieldByName('ENDERECO_ENTREGA_CIDADE').AsString      := Consulta_dados.Endereco_Cidade;
   TbPrincipal.FieldByName('COD_MUNICIPIO_IBGE').AsString           := Consulta_dados.Endereco_Cidade_Cod_Ibge;

   if qrUF_Transporte.Locate('DESCRICAO', Consulta_dados.Endereco_Uf, []) then
      TbPrincipal.FieldByName('ENDERECO_ENTREGA_COD_UF').Value  := qrUF_Cobranca.FieldByName('cod_uf').Value
   else
      InicioDaTabela(qrUF_Cobranca);


   if TbPrincipal.State in [dssInsert] then
      mesmo_endereco := true
   else
   begin
      if (MessageDlg('Endereço de cobrança e entrega são iguais?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
         mesmo_endereco := true
      else
         mesmo_endereco := False;
   end;

   if mesmo_endereco then
   begin
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_CEP').AsString            := Consulta_dados.Endereco_Cep;
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_LOGRADOURO').AsString     := Consulta_dados.Endereco_Logradouro;
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_NUMERO').AsString         := Consulta_dados.Endereco_Numero;
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_COMPLEMENTO').AsString    := Consulta_dados.Endereco_Complemento;
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_BAIRRO').AsString         := Consulta_dados.Endereco_Bairro;
      TbPrincipal.FieldByName('ENDERECO_COBRANCA_CIDADE').AsString         := Consulta_dados.Endereco_Cidade;
      TbPrincipal.FieldByName('COD_MUNICIPIO_IBGE').AsString               := Consulta_dados.Endereco_Cidade_Cod_Ibge;


      if qrUF_Cobranca.Locate('DESCRICAO', Consulta_dados.Endereco_Uf , []) then
         TbPrincipal.FieldByName('ENDERECO_COBRANCA_COD_UF').Value  := qrUF_Cobranca.FieldByName('cod_uf').Value
      else
        InicioDaTabela(qrUF_Cobranca);
   end;

   Consulta_dados.Destroy;
end;



procedure TfrmCadCliente.copiaCNPJsemmscara1Click(Sender: TObject);
begin
  inherited;
  edtCNPJ.CopyToClipboard;
  Clipboard.AsText := LimpaTexto(Clipboard.AsText);
end;


procedure TfrmCadCliente.copiaCNPJcommscara1Click(Sender: TObject);
begin
  inherited;
  edtCNPJ.CopyToClipboard;
end;

procedure TfrmCadCliente.btnDetalharCTRCClick(Sender: TObject);
begin
  inherited;
   if qrNF.IsEmpty then
   begin
      MessageDlg('Não existem NFs a serem detalhadas', mtWarning, [mbOK], 0);
      Exit;
   end;

   frmNF := TfrmNF.Create(Application);
   frmNF.OutraTela := True;
   frmNF.Consulta  := True;
   frmNF.TbPrincipal.Locate('NUMERO',qrNF.FieldByName('NUMERO').Value,[]);
   frmNF.BtEditar.Click;
   frmNF.ShowModal;
   frmNF.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrNF.RefreshAll;

end;

procedure TfrmCadCliente.IB_Grid3DblClick(Sender: TObject);
begin
  inherited;
  btnDetalharCTRC.Click;
end;

procedure TfrmCadCliente.grdPesquisaGetCellProps(Sender: TObject; ACol,
  ARow: Integer; AState: TGridDrawState; var AColor: TColor; AFont: TFont);
begin
  inherited;
   if ARow< 0 then
      Exit;

   if TbPrincipal.BufferRowCount <=0 then
      Exit;

   if grdPesquisa.DataRow[ ARow ] > 0 then
   begin
     if tbPrincipal.BufferFieldByName('STATUS_COR').AsString <> '' then
     begin
        AFont.Color := StringToColor(tbPrincipal.BufferFieldByName('STATUS_COR').AsString);
     end;
   end;

end;

procedure TfrmCadCliente.btnPesquisaCNAEClick(Sender: TObject);
begin
  inherited;
   //==================== Pesquisa CNAES ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrCnae;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Atividades Empresariais';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrCnae.Locate('COD_CNAE', frmModeloPesquisa.TbPrincipal.FieldByName('COD_CNAE').Value ,[]);
      edtCnae.Text := frmModeloPesquisa.TbPrincipal.FieldByName('COD_CNAE').AsString;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadCliente.btn2Click(Sender: TObject);
begin
  inherited;
  frmCadClassificacaoClientes := TfrmCadClassificacaoClientes.Create(Application);
  frmCadClassificacaoClientes.OutraTela := True;
  frmCadClassificacaoClientes.BtInserirClick(Self);
  frmCadClassificacaoClientes.ShowModal;

   //============== Localiza a nova Classificação de Clientes ============

  tbPrincipal.FieldByName('COD_CLASSIFICACAO').Value:=frmCadClassificacaoClientes.TbPrincipal.FieldByName('COD_CLASSIFICACAO').Value;
  frmCadClassificacaoClientes.Destroy;
  qryClassificacaoClientes.RefreshAll;
  AtualizaTela;
  Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadCliente.btn1Click(Sender: TObject);
begin
  inherited;
   //==================== Pesquisa Classificação Clientes ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qryClassificacaoClientes;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Classificação Clientes';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qryClassificacaoClientes.Locate('COD_CLASSIFICACAO', frmModeloPesquisa.TbPrincipal.FieldByName('COD_CLASSIFICACAO').AsInteger ,[]);
      TbPrincipal.FieldByName('COD_CLASSIFICACAO').Value:= qryClassificacaoClientes.FieldByName('COD_CLASSIFICACAO').AsInteger;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadCliente.edtStatusMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
   MostraHintSituacaoCadastral;
end;

procedure TfrmCadCliente.MostraHintSituacaoCadastral;
var i : Integer;
begin
  //================= Mostra o hint da situação cadastral ==============
  edtStatus.Hint := 'Histórico Status';

  if qryMudancaStatus.IsEmpty then
     Exit;

  qryMudancaStatus.First;

  edtStatus.Hint := 'Situação cadastral. Últimas Alterações:' + #13;
  for i := 0 To 5 do
  begin
     edtStatus.Hint := edtStatus.Hint +
                        qryMudancaStatus.FieldByName('DATA').AsString + ' - ' + qryMudancaStatus.FieldByName('COMENTARIO').AsString  + #13;
     qryMudancaStatus.Next;

     if qryMudancaStatus.Eof then
        Break;
  end;

end;
procedure TfrmCadCliente.edtStatusClick(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
   begin
     MostraHintSituacaoCadastral;
     MessageDlg(edtStatus.Hint, mtInformation, [mbOK], 0);
     Exit;
   end;

end;

procedure TfrmCadCliente.NOCONTRIBUINTE1Click(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
     Exit;

   TbPrincipal.FieldByName('INSCRICAO').Value := 'NÃO CONTRIBUINTE';

end;

procedure TfrmCadCliente.cbbCobrancaChange(Sender: TObject);
begin
  inherited;
  qrContas.Close;
   if cbbCobranca.Text = '' then
   begin
      qrContas.Filter   := '';
      qrContas.Filtered := False;
      Exit;
   end
   else
   if cbbCobranca.Text = 'Todas' then
   begin
      qrContas.Filter   := '';
      qrContas.Filtered := False;
   end
   else
   if cbbCobranca.Text = 'Vencidas' then
   begin
     qrContas.Filter   := 'contas_receber.data_pagamento is null and contas_receber.data_vencimento < ' + MontaDataSql(date);
     qrContas.Filtered := True;
   end
   else
   if cbbCobranca.Text = 'Em Aberto' then
   begin
     qrContas.Filter   := 'contas_receber.data_pagamento is null ';
     qrContas.Filtered := True;
   end
   else
   if cbbCobranca.Text = 'Quitadas' then
   begin
     qrContas.Filter   := 'contas_receber.data_pagamento is not null ';
     qrContas.Filtered := True;
   end;
  qrContas.Open;

end;

procedure TfrmCadCliente.btnDetalharCobrancaClick(Sender: TObject);
begin
  inherited;
   if qrContas.IsEmpty then
   begin
      MessageDlg('Não existem Contas a serem detalhadas', mtWarning, [mbOK], 0);
      Exit;
   end;
   frmCadContasReceber:= TfrmCadContasReceber.Create(Application);
   frmCadContasReceber.OutraTela := True;
   frmCadContasReceber.Consulta  := True;
   frmCadContasReceber.TbPrincipal.Locate('COD_CONTA_RECEBER',qrContas.FieldByName('COD_CONTA_RECEBER').Value,[]);
   frmCadContasReceber.BtEditar.Click;
   frmCadContasReceber.ShowModal;
   frmCadContasReceber.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrContas.RefreshAll;

end;

end.

