unit CadFornecedor;

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, IB_EditButton,
  System.ImageList, ACBrBase, ACBrValidador;

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

type
  TfrmCadFornecedor = 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;
    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;
    lblTotalAtendimento: TLabel;
    lblTotalColeta: TLabel;
    tbAtendimento: TIB_Query;
    dsrAtendimento: TIB_DataSource;
    btnNovaColeta: TBitBtn;
    EditarColeta: TBitBtn;
    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;
    TabSheet1: TTabSheet;
    Contatos: TTabSheet;
    btnNovoContato: TBitBtn;
    btnDetalharContato: TBitBtn;
    btnEcluirContato: TBitBtn;
    dsrContatos: TIB_DataSource;
    IB_Grid4: TIB_Grid;
    qrUF_Transporte: TIB_Query;
    dsrUf_Transporte: TIB_DataSource;
    tabContas: TTabSheet;
    Panel10: TPanel;
    ComboBox1: TComboBox;
    BitBtn3: TBitBtn;
    BitBtn6: TBitBtn;
    IB_Grid5: TIB_Grid;
    dbCodigo: TIB_Edit;
    dbDescricaoCNAE: TIB_Edit;
    qrContatos: TIB_Query;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    edtAbertura: TIB_Edit;
    edtFechamento: TIB_Edit;
    edtAlmocoInicio: TIB_Edit;
    edtAlmocoFim: TIB_Edit;
    Panel4: TPanel;
    GroupBox2: TGroupBox;
    edtBairroTransporte: TIB_Edit;
    edtCepTransporte: TIB_Edit;
    edtEnderecoTransporte: TIB_Edit;
    edtCidadeTransporte: TIB_Edit;
    edtNumeroTransporte: TIB_Edit;
    edtComplementoTransporte: TIB_Edit;
    edtUfTransporte: TIB_LookupCombo;
    Panel5: TPanel;
    edtObsTransporte: TIB_Memo;
    btnPesquisaReceitaFederal: TBitBtn;
    dbCod_Municipio_IBGE: TIB_Edit;
    AcbrValidador: TACBrValidador;
    procedure BtCancelarClick(Sender: TObject);
    procedure BtEditarClick(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 MontaMascaraFornecedor;
    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 BtExcluirClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn4Click(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 dsrAtendimentoStateChanged(Sender: TIB_DataSource;
      ADataset: TIB_Dataset);
    procedure FormCreate(Sender: TObject);
    procedure btnNovaColetaClick(Sender: TObject);
    procedure EditarColetaClick(Sender: TObject);
    procedure edtObsTransporteKeyPress(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 PesquiarStatus1Click(Sender: TObject);
    procedure edtStatusKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edtCnaeKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    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 grdPesquisaGetCellProps(Sender: TObject; ACol, ARow: Integer;
      AState: TGridDrawState; var AColor: TColor; AFont: TFont);
    procedure IB_Memo1KeyPress(Sender: TObject; var Key: Char);
    procedure btnPesquisaReceitaFederalClick(Sender: TObject);
  private
    procedure CondicoesEndereco;
    procedure BuscaDadosReceita;
    { Private declarations }
  public
    { Public declarations }
    Fornecedor_Exterior,
    Fornecedor_Corporativo : Boolean;
  end;

var
  frmCadFornecedor: TfrmCadFornecedor;

implementation

uses DataModulo, Rotinas, StrUtils, AtendimentoFornecedor, Pedidos,
  AlteracaoStatusFornecedor, Math, PesquisaCep, ModeloPesquisa,
  CadStatusFornecedor, CadVendedor, AvisoAtendimentoFornecedor,
  ContatoFornecedor, BuscaCNPJ, Consulta_Dados_Cadastrais, ConsultaCnpj;

{$R *.dfm}

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

procedure TfrmCadFornecedor.BtEditarClick(Sender: TObject);
begin
   pgcOutros.ActivePageIndex := 0;

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

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

procedure TfrmCadFornecedor.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;

      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 TfrmCadFornecedor.BtInserirClick(Sender: TObject);
begin
  inherited;
   TbPrincipal.FieldByName('TIPO_CADASTRO').Value := 'G';

   TbPrincipal.FieldByName('DATA_CAD').Value   := Date;
   TbPrincipal.FieldByName('COD_STATUS').Value := Dados.tbParametro_Fornecedor.FIeldByName('COD_STATUS_INICIAL').Value;

   qrStatus.First;
   TbPrincipal.FieldByName('COD_STATUS').Value:=qrStatus.FieldByName('COD_STATUS').AsInteger;

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

   pgcOutros.ActivePageIndex := 0;
   AtualizaTela;
end;

procedure TfrmCadFornecedor.BtGravarClick(Sender: TObject);
var LibHandle: THandle;
    ConsisteInscricaoEstadual : TConsisteInscricaoEstadual;
    IRet : Integer;
begin
   if edtRazaoSocial.text = '' then
   begin
      MessageDlg('Informe a Razão Social do Fornecedor', mtWarning, [mbOK], 0);
      edtRazaoSocial.SetFocus;
      Exit;
   end;

   if edtStatus.Text = '' then
   begin
      MessageDlg('Informe o Status do Fornecedor', mtInformation, [mbOK], 0);
      edtStatus.SetFocus;
      Exit;
   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;


   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_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
      frmAlteracaoStatusFornecedor := TfrmAlteracaoStatusFornecedor.Create(Application);
      frmAlteracaoStatusFornecedor.qrAlteracaoStatus.Insert;
      frmAlteracaoStatusFornecedor.qrAlteracaoStatus.FieldByName('COD_USUARIO').Value := Dados.qrUsuario.FieldByName('cod_usuario').Value;
      frmAlteracaoStatusFornecedor.qrAlteracaoStatus.FieldByName('COD_Fornecedor').Value := TbPrincipal.FieldByName('cod_Fornecedor').Value;
      frmAlteracaoStatusFornecedor.qrAlteracaoStatus.FieldByName('DATA').Value        := Date;
      frmAlteracaoStatusFornecedor.qrAlteracaoStatus.FieldByName('HORA').Value        := Time;

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

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

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

   inherited;
end;

procedure TfrmCadFornecedor.edtCnpjExit(Sender: TObject);
var erro,
    tipoPessoa :string;
begin
  inherited;

   if (TbPrincipal.State in [dssInsert]) 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
           BuscaDadosReceita;

          //================= 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;
   MontaMascaraFornecedor;
end;

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

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

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

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

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

   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;

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

   qrContatos.Close;
   qrContatos.ParamByName('codFornecedor').Value := TbPrincipal.FieldByName('COD_Fornecedor').Value;
   qrContatos.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;

end;

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

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

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

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

end;

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

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

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

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

   frmAtendimentoFornecedor := TfrmAtendimentoFornecedor.Create(Application);
   tbAtendimento.ReadOnly := False;
   tbAtendimento.Edit;

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

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

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

procedure TfrmCadFornecedor.AvisarAtendimentos;
begin
   {============= verifica sE o Fornecedor tem atendimentos a avisar ============}
   frmAvisoAtendimentoFornecedor := TfrmAvisoAtendimentoFornecedor.Create(Application);
   frmAvisoAtendimentoFornecedor.qrAvisoAtendimento.Close;
   frmAvisoAtendimentoFornecedor.qrAvisoAtendimento.ParamByName('cod_Fornecedor').Value := TbPrincipal.FieldByName('cod_Fornecedor').Value;
   frmAvisoAtendimentoFornecedor.qrAvisoAtendimento.Open;

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

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

procedure TfrmCadFornecedor.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 ============}
   frmAtendimentoFornecedor := TfrmAtendimentoFornecedor.Create(Application);
   tbAtendimento.ReadOnly := False;
   tbAtendimento.Insert;

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

   tbAtendimento.FieldByName('COD_ATEND_Fornecedor').Value  := qryPesquisa.FieldByName('valor').AsInteger + 1;
   tbAtendimento.FieldByName('CNPJ_Fornecedor').Value       := TbPrincipal.FieldByName('cnpj').Value;
   tbAtendimento.FieldByName('DATA').Value               := Date;
   tbAtendimento.FieldByName('HORA').Value               := Time;
   tbAtendimento.FieldByName('SEQUENCIAL_Fornecedor').Value := TbPrincipal.FieldByName('SEQUENCIAL').Value;
   tbAtendimento.FieldByName('COD_Fornecedor').Value        := TbPrincipal.FieldByName('COD_Fornecedor').Value;
   tbAtendimento.FieldByName('COD_USUARIO').Value        := Dados.qrUsuario.FieldByName('COD_USUARIO').Value ;
   tbAtendimento.FieldByName('AVISAR').Value             := 'F';

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

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

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

function TfrmCadFornecedor.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_Fornecedor',qrVerificaSequencial.FieldByName('COD_Fornecedor').value,[]);
   end;
   qrVerificaSequencial.Close;
end;

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

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

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

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

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

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

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

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

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

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

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

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

   try
      edtRazaoSocial.SetFocus;
      except
   end;
end;

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

end;

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

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

end;

procedure TfrmCadFornecedor.MontaMascaraFornecedor;
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 TfrmCadFornecedor.dsrPedidoStateChanged(Sender: TIB_DataSource;
  ADataset: TIB_Dataset);
begin
  inherited;
   lblTotalColeta.Caption := 'Total ' + IntToStr(qrPedido.RecordCount);
end;

procedure TfrmCadFornecedor.dsrAtendimentoStateChanged(
  Sender: TIB_DataSource; ADataset: TIB_Dataset);
begin
  inherited;
    lblTotalAtendimento.Caption := 'Total ' + IntToStr(tbAtendimento.RecordCount);
end;

procedure TfrmCadFornecedor.FormCreate(Sender: TObject);
begin
   Chave_Tabela := 'COD_Fornecedor';
   Gera_Codigo:=True;
   inherited;

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

   Dados.tbParametro_Fornecedor.Open;
   qrStatus.Open;
   qrCnae.Open;
   qrUF_Transporte.Open;

   Fornecedor_Corporativo := False;
   Fornecedor_Exterior    := False;
   pgcOutros.ActivePage := tabEnderecos;
end;

procedure TfrmCadFornecedor.btnNovaColetaClick(Sender: TObject);
begin
  inherited;
{   frmPedidos := TfrmPedidos.Create(Application);
   frmPedidos.OutraTela := True;
   frmPedidos.Consulta  := True;
   frmPedidos.BtInserir.Click;
   frmPedidos.qryFornecedor.Locate('Fornecedor',TbPrincipal.FieldByName('COD_Fornecedor').Value,[]);
   frmPedidos.ShowModal;
   frmPedidos.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrPedido.RefreshAll;}
end;

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

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

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

function TfrmCadFornecedor.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;
            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;
            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;
            edtAlmocoInicio.SetFocus;
            Result := False;
            Exit;
         end;
      end;
   end;

end;

procedure TfrmCadFornecedor.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;
   end;

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


procedure TfrmCadFornecedor.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;

   Screen.OnActiveControlChange := TrocaCor;
end;

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

end;

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

   frmCadStatusFornecedor := TfrmCadStatusFornecedor.Create(Application);
   frmCadStatusFornecedor.OutraTela := True;
   frmCadStatusFornecedor.BtInserirClick(Self);
   frmCadStatusFornecedor.ShowModal;
   cod := frmCadStatusFornecedor.TbPrincipal.FieldByName('COD_STATUS').AsInteger;
   frmCadStatusFornecedor.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 TfrmCadFornecedor.edtStatusExit(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
   begin
      AtualizaTela;
   end;
end;

procedure TfrmCadFornecedor.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 TfrmCadFornecedor.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 Fornecedors';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrStatus.Locate('COD_STATUS', frmModeloPesquisa.TbPrincipal.FieldByName('COD_STATUS').Value ,[]);
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadFornecedor.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 TfrmCadFornecedor.VerificaCamposObrigatorios: Boolean;
begin
   //=============== Verifica na tabela de parametros do Fornecedor quais campos sao obrigatorios ================
   Result := False;
   if Dados.tbParametro_Fornecedor.FieldByName('CNPJ_OBRIG').AsString = 'T' then
   begin
      if edtCnpj.Field.AsString = '' then
      begin
         MessageDlg('É obrigatório informar o CNPJ/CPF do Fornecedor', mtWarning, [mbOK], 0);
         edtCnpj.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Fornecedor.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_Fornecedor.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_Fornecedor.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_Fornecedor.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_Fornecedor.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_Fornecedor.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_Fornecedor.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;
         edtCepTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Fornecedor.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;
         edtEnderecoTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Fornecedor.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;
         edtNumeroTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Fornecedor.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;
         edtComplementoTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Fornecedor.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;
         edtBairroTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Fornecedor.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;
         edtBairroTransporte.SetFocus;
         Exit;
      end;
   end;

   if Dados.tbParametro_Fornecedor.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;
         edtUfTransporte.SetFocus;
         Exit;
      end;
   end;

    if Dados.tbParametro_Fornecedor.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;
         edtAbertura.SetFocus;
         Exit;
       end;
    end;

    if Dados.tbParametro_Fornecedor.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;
         edtObsTransporte.SetFocus;
         Exit;
       end;
    end;


    Result := True;
end;

procedure TfrmCadFornecedor.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 TfrmCadFornecedor.btnNovoContatoClick(Sender: TObject);
var Readonly: Boolean;
codigo : Integer;
begin
  inherited;
   qryPesquisa.Close;
   qryPesquisa.SQL.Clear;
   qryPesquisa.SQL.Add(' SELECT MAX ( CONTATO_Fornecedor.CODIGO ) as valor ');
   qryPesquisa.SQL.Add(' FROM CONTATO_Fornecedor ');
   qryPesquisa.Open;

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

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

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

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

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

   frmContatoFornecedor := TfrmContatoFornecedor.Create(Application);
   if frmContatoFornecedor.ShowModal = mrOk then
   begin
      if TbPrincipal.State in [dssInsert] then
         TbPrincipal.PostRetaining;
      qrContatos.Post
   end
   else
      qrContatos.Cancel;
   frmContatoFornecedor.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrContatos.ReadOnly := Readonly;
end;
procedure TfrmCadFornecedor.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 TfrmCadFornecedor.IB_Grid4CellDblClick(Sender: TObject; ACol,
  ARow: Integer; AButton: TMouseButton; AShift: TShiftState);
begin
  inherited;
   btnDetalharContato.Click;
end;

procedure TfrmCadFornecedor.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('COR').AsString <> '' then
     begin
        AFont.Color := StringToColor(tbPrincipal.BufferFieldByName('COR').AsString);
     end;
   end;
end;

procedure TfrmCadFornecedor.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:=' ';
end;

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

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

procedure TfrmCadFornecedor.BuscaDadosReceita;
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.Local_Consulta            := lcReceita_Federal;

   Consulta_dados.Selecionar_Local_consulta := False;
   Consulta_dados.Tabela_Relacionada        := 'FORNECEDOR';
   Consulta_dados.Cod_Tabela_Relacionada    := TbPrincipal.FieldByName('COD_FORNECEDOR ').AsString;

   try
      if Consulta_dados.Realizar_Consulta = False then
      begin
         Consulta_dados.Destroy;
         Exit;
      end
    except on E: Exception do
    begin
      showmessage(e.message);
         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('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').Value              := Consulta_dados.Endereco_Cidade_Cod_Ibge;

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

    if qrCnae.Locate('COD_CNAE', Consulta_dados.Cnae, [] ) then
       tbPrincipal.FieldByName('COD_CNAE').Value  := Consulta_dados.Cnae;

   Consulta_dados.Destroy;
end;


end.

