unit CadManifesto;

interface

uses
  Windows, system.UItypes, IB_Access,  Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ModeloCadastro, IB_Components, ExtCtrls,
  IB_Grid, StdCtrls, Buttons, ComCtrls, Mask, IB_Controls,
  ppDBPipe, ppReport, 
  IBODataset, ppCtrls, ppBands, raCodMod,
  ppParameter, ppModule, ppPrnabl, ppClass, ppCache, ppProd, ppComm,
  ppRelatv,  UCBase, ImgList, AppEvnts, jpeg, Grids, cxGraphics,
  cxLookAndFeels, cxLookAndFeelPainters, Menus, cxButtons, dxGDIPlusClasses,
  DBGrids, DBClient, ppDesignLayer, ppDB, Data.DB, IB_EditButton,
  System.ImageList, dxSkinsCore, dxSkinOffice2010Blue;

type
  TfrmCadManifesto = class(TFrModeloCadastro)
    IB_Date2: TIB_Date;
    GroupBox1: TGroupBox;
    dbCodigo: TIB_Text;
    edtusuarioLancamento: TIB_Edit;
    edtDataViagem: TIB_Date;
    edtHoraViagem: TIB_Edit;
    IB_Edit7: TIB_Edit;
    qrRota: TIB_Query;
    dsrRota: TIB_DataSource;
    edtCodRota: TEdit;
    edtRota: TIB_LookupCombo;
    qrMotorista: TIB_Query;
    dsrMotorista: TIB_DataSource;
    qrVeiculo1: TIB_Query;
    dsrVeiculo1: TIB_DataSource;
    pgOutros: TPageControl;
    tabDados: TTabSheet;
    tabNF: TTabSheet;
    GroupBox2: TGroupBox;
    IB_Edit3: TIB_Edit;
    IB_Edit5: TIB_Edit;
    IB_Edit8: TIB_Edit;
    IB_Edit9: TIB_Edit;
    GroupBox4: TGroupBox;
    IB_Edit14: TIB_Edit;
    IB_Edit15: TIB_Edit;
    IB_Edit16: TIB_Edit;
    GroupBox3: TGroupBox;
    IB_Edit10: TIB_Edit;
    IB_Edit11: TIB_Edit;
    IB_Edit12: TIB_Edit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    qrUsuarioCadastro: TIB_Query;
    dsrUsuarioCadastro: TIB_DataSource;
    dsrVeiculo2: TIB_DataSource;
    edtMotorista: TIB_LookupCombo;
    edtPlaca1: TIB_LookupCombo;
    edtPlaca2: TIB_LookupCombo;
    qrVeiculo2: TIB_Query;
    qrNF: TIB_Query;
    grdNF: TIB_Grid;
    dsrNF: TIB_DataSource;
    BitBtn5: TBitBtn;
    qrPesquisaNF: TIB_Query;
    BitBtn6: TBitBtn;
    btnImprimir: TBitBtn;
    TabSheet1: TTabSheet;
    edtCnpjSeguradora: TMaskEdit;
    btnPesquisaSeguradora: TBitBtn;
    Label4: TLabel;
    IB_Text2: TIB_Text;
    Label5: TLabel;
    IB_Text3: TIB_Text;
    IB_Text4: TIB_Text;
    Label6: TLabel;
    IB_Text5: TIB_Text;
    Label7: TLabel;
    IB_Memo1: TIB_Memo;
    qrSeguradora: TIB_Query;
    dsrSeguradora: TIB_DataSource;
    edtRazaoSeguradora: TIB_LookupCombo;
    qrSeguradoraPesquisa: TIB_Query;
    IB_Text1: TIB_Text;
    Label3: TLabel;
    edtTotalMercadorias: TIB_Currency;
    edtTotalPeso: TIB_Currency;
    edtQteCTRC: TIB_Currency;
    dtTotais: TIB_DataSource;
    edtCodNF: TLabeledEdit;
    btnListagem: TBitBtn;
    qrLista: TIBOQuery;
    dsrLista: TDataSource;
    ppDBPipeline1: TppDBPipeline;
    RelatLista: TppReport;
    ppParameterList1: TppParameterList;
    btnBuscarNF: TSpeedButton;
    TabSheet2: TTabSheet;
    dbChaveAcesso: TIB_Edit;
    btnTransmitir: TcxButton;
    edtProtocolo: TIB_Edit;
    btnVerificarProtocoloCte: TcxButton;
    lblVerificarprotocolo: TLabel;
    IB_Edit1: TIB_Edit;
    IB_Edit2: TIB_Edit;
    IB_Edit4: TIB_Edit;
    edtMANIFESTOPROTOCOLO_TRANSMISSAO: TIB_Edit;
    cxButton1: TcxButton;
    IB_Edit6: TIB_Edit;
    cxButton2: TcxButton;
    IB_Memo2: TIB_Memo;
    IB_Edit13: TIB_Edit;
    Shape2: TShape;
    IB_Text6: TIB_Text;
    IB_Text7: TIB_Text;
    IB_Edit17: TIB_Edit;
    IB_Edit18: TIB_Edit;
    chkVerSomenteNFEletronico: TCheckBox;
    qryTotais: TIB_Query;
    btn1: TBitBtn;
    IB_Edit19: TIB_Edit;
    IB_Edit20: TIB_Edit;
    ppHeaderBand1: TppHeaderBand;
    ppShape2: TppShape;
    ppLabel1: TppLabel;
    ppLabel8: TppLabel;
    ppLabel9: TppLabel;
    ppLabel10: TppLabel;
    ppLabel15: TppLabel;
    ppLabel11: TppLabel;
    ppDBText7: TppDBText;
    ppLabel3: TppLabel;
    ppDetailBand1: TppDetailBand;
    ppDBText2: TppDBText;
    ppDBText4: TppDBText;
    ppDBText1: TppDBText;
    ppDBText5: TppDBText;
    ppDBText6: TppDBText;
    ppFooterBand1: TppFooterBand;
    ppSummaryBand1: TppSummaryBand;
    ppShape1: TppShape;
    ppDBCalc1: TppDBCalc;
    ppDBCalc2: TppDBCalc;
    ppDBCalc3: TppDBCalc;
    raCodeModule1: TraCodeModule;
    ppDBCalc4: TppDBCalc;
    btnVerificaWebService: TcxButton;
    btn2: TBitBtn;
    btn3: TBitBtn;
    grp1: TGroupBox;
    qrUF_Transporte: TIB_Query;
    dsrUf_Transporte: TIB_DataSource;
    edtUfTransporte: TIB_LookupCombo;
    btn6: TBitBtn;
    btnPercursoDel: TcxButton;
    btnPercursoAdd: TcxButton;
    IB_Grid1: TIB_Grid;
    qrPercurso: TIB_Query;
    dtPercurso: TIB_DataSource;
    procedure FormCreate(Sender: TObject);
    procedure AtualizaTela;
    procedure edtCodRotaExit(Sender: TObject);
    procedure edtCodRotaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BtExcluirClick(Sender: TObject);
    procedure BtCancelarClick(Sender: TObject);
    procedure BtAnteriorClick(Sender: TObject);
    procedure BtProximoClick(Sender: TObject);
    procedure BtInserirClick(Sender: TObject);
    procedure BtEditarClick(Sender: TObject);
    procedure edtRotaChange(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure edtMotoristaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edtPlaca1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edtPlaca2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn5Click(Sender: TObject);
    procedure BtGravarClick(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure btnImprimirClick(Sender: TObject);
    procedure btnPesquisaSeguradoraClick(Sender: TObject);
    procedure edtCnpjSeguradoraKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edtRazaoSeguradoraChange(Sender: TObject);
    procedure edtCnpjSeguradoraExit(Sender: TObject);
    procedure btnEditar2Click(Sender: TObject);
    procedure edtMotoristaChange(Sender: TObject);
    procedure btnListagemClick(Sender: TObject);
    procedure btnBuscarNFClick(Sender: TObject);
    procedure btnTransmitirClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnVerificarProtocoloCteClick(Sender: TObject);
    procedure cxButton1Click(Sender: TObject);
    procedure cxButton2Click(Sender: TObject);
    procedure grdPesquisaGetCellProps(Sender: TObject; ACol, ARow: Integer;
      AState: TGridDrawState; var AColor: TColor; AFont: TFont);
    procedure btn1Click(Sender: TObject);
    procedure btnVerificaWebServiceClick(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure imgGerarXMLClick(Sender: TObject);
    procedure btn6Click(Sender: TObject);
    procedure btnPercursoAddClick(Sender: TObject);
    procedure btnPercursoDelClick(Sender: TObject);
  private
    procedure Ultimo_Veiculo_Usado;
    procedure PesquisaRotas;
    procedure PesquisaMotorista;
    procedure PesquisaVeiculo1;
    procedure PesquisaVeiculo2;
    procedure AtualizaMostraNF;
    procedure MostraPercurso;


    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmCadManifesto: TfrmCadManifesto;
  sequencia:integer;

implementation

uses ModeloPesquisa, DataModulo, Rotinas,
  BuscaNFe_Para_Manifestar, DataModulo_NFe, Justificativa, CadSeguradora,
  CadRota, CadVeiculo, CadMotorista;

{$R *.dfm}

procedure TfrmCadManifesto.AtualizaTela;
begin
   //=============== Atualiza a visualizacao dos dados ================
   if not qrRota.Locate('COD_ROTA' , TbPrincipal.FieldByName('COD_ROTA').Value , [] ) THEN
   begin
      if not qrRota.Bof then
      begin
         qrRota.First;
         qrRota.Prior;
      end;
   end;

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

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

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

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

   if not qrSeguradora.Locate('CNPJ', TbPrincipal.FieldByName('SEGURADORA_CNPJ').Value, []) then
   begin
      if not qrSeguradora.Bof then
      begin
         qrSeguradora.First;
         qrSeguradora.Prior;
      end;
   end;
  AtualizaMostraNF;
  MostraPercurso;
end;

procedure TfrmCadManifesto.AtualizaMostraNF;
begin
  qrNF.Close;
  qrNF.ParamByName('cod_manifesto').Value   := TbPrincipal.FieldByName('COD_MANIFESTO').Value;
  qrNF.ParamByName('cod_filial').Value      := TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value;
  qrNF.ParamByName('modeloManifesto').Value := TbPrincipal.FieldByName('MODELO').Value;
  qrNF.Open;

  qryTotais.Close;
  qryTotais.ParamByName('cod_manifesto').Value   := TbPrincipal.FieldByName('COD_MANIFESTO').Value;
  qryTotais.ParamByName('cod_filial').Value      := TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value;
  qryTotais.ParamByName('modeloManifesto').Value := TbPrincipal.FieldByName('MODELO').Value;
  qryTotais.Open;

end;

procedure TfrmCadManifesto.MostraPercurso;
begin
  qrPercurso.Close;
  qrPercurso.ParamByName('cod_manifesto').Value   := TbPrincipal.FieldByName('COD_MANIFESTO').Value;
  qrPercurso.ParamByName('cod_filial').Value      := TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value;
  qrPercurso.ParamByName('modeloManifesto').Value := TbPrincipal.FieldByName('MODELO').Value;
  qrPercurso.Open;
end;

procedure TfrmCadManifesto.FormCreate(Sender: TObject);
begin
    //==================== Filta apenas os Manifestos da filial logada =============
   TbPrincipal.ParamByName('codFilial').Value := Dados.qrFilial.FieldByName('COD_FILIAL').Value;

   inherited;

   qrRota.Close;
   qrRota.ParamByName('codFilial').Value := Dados.qrFilial.FieldByName('cod_filial').Value;
   qrRota.Open;

   qrRota.Open;
   qrMotorista.Open;
   qrVeiculo1.Open;
   qrVeiculo2.Open;
   qrUsuarioCadastro.Open;
   qrSeguradora.Open;
   InicioDaTabela(qrUF_Transporte);
   InicioDaTabela(qrPercurso);
   pgOutros.ActivePage := tabDados;

//  DMNFe.LeConfiguracoesNFe;
   DMNFe := TDMNFe.Create(Self);

end;

procedure TfrmCadManifesto.edtCodRotaExit(Sender: TObject);
var Cod : Integer;
begin
   inherited;

   if edtCodRota.Text = '' then
      Exit;

   if TryStrToInt(edtCodRota.Text , cod) = False then
   begin
      MessageDlg('O código Informado não é válido', mtInformation, [mbOK], 0);
      edtCodRota.SetFocus;
      Exit;
   end;

   if not qrRota.Locate('cod_rota',cod,[]) then
   begin
      MessageDlg('Rota não Disponível', mtWarning, [mbOK], 0);
      edtCodRota.SetFocus;
      edtCodRota.SelectAll;
      if not qrRota.Bof then
      begin
         qrRota.First;
         qrRota.Prior;
      end;
   end;

end;

procedure TfrmCadManifesto.PesquisaRotas;
begin
   //==================== Pesquisa rotas ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrRota;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Rotas';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrRota.Locate('COD_ROTA', frmModeloPesquisa.TbPrincipal.FieldByName('COD_ROTA').Value ,[]);
      edtRota.Text := qrRota.FieldByName('DESCRICAO').AsString;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadManifesto.Ultimo_Veiculo_Usado;
begin
   if not qrVeiculo1.Locate('placa', qrMotorista.FieldByName('ULTIMO_VEICULO_USADO1').Value, [])  then
   begin
     if not qrVeiculo1.Bof  then
     begin
       qrVeiculo1.First;
       qrVeiculo1.Prior;
     end;
   end;
   if not qrVeiculo2.locate('placa', qrMotorista.FieldByName('ULTIMO_VEICULO_USADO2').Value, [])  then
   begin
     if not qrVeiculo2.Bof  then
     begin
       qrVeiculo2.First;
       qrVeiculo2.Prior;
     end;
   end;
end;

procedure TfrmCadManifesto.PesquisaMotorista;
begin
   //==================== Pesquisa rotas ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrMotorista;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Motoristas';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrMotorista.Locate('CPF', frmModeloPesquisa.TbPrincipal.FieldByName('CPF').Value ,[]);
      edtMotorista.Text := qrMotorista.FieldByName('NOME').AsString;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadManifesto.PesquisaVeiculo1;
begin
   //==================== Pesquisa rotas ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrVeiculo1;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Veículo';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrVeiculo1.Locate('PLACA', frmModeloPesquisa.TbPrincipal.FieldByName('PLACA').Value ,[]);
      edtPlaca1.Text := qrVeiculo1.FieldByName('PLACA').AsString;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadManifesto.PesquisaVeiculo2;
begin
   //==================== Pesquisa rotas ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrVeiculo2;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Veículo';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrVeiculo2.Locate('PLACA', frmModeloPesquisa.TbPrincipal.FieldByName('PLACA').Value ,[]);
      edtPlaca2.Text := qrVeiculo2 .FieldByName('PLACA').AsString;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;


procedure TfrmCadManifesto.edtCodRotaKeyDown(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 (edtCodRota.Focused or edtRota.Focused) then
   begin
      PesquisaRotas;
   end;
end;

procedure TfrmCadManifesto.BitBtn1Click(Sender: TObject);
begin
  inherited;
   PesquisaRotas;
end;

procedure TfrmCadManifesto.BitBtn2Click(Sender: TObject);
begin
  inherited;
   PesquisaMotorista
end;

procedure TfrmCadManifesto.BtExcluirClick(Sender: TObject);
begin
   inherited;
   AtualizaTela;
end;

procedure TfrmCadManifesto.BtCancelarClick(Sender: TObject);
begin
    {============================================
       Se estiver inserindo um novo manifesto
       No cancel deve tirar o vinculo dos CTRC com o Manifesto
    ============================================}

   if TbPrincipal.State in [dssInsert] then
   begin
      qrNF.First;
      while  not qrNF.Eof do
      begin
         qrNF.Edit;
         qrNF.FieldByName('COD_MANIFESTO').Value        := Null;
         qrNF.FieldByName('COD_FILIAL_MANIFESTO').Value := Null;
         qrNF.Post;
         qrNF.Next;
      end;
   end;

  inherited;
   AtualizaTela;
   edtCnpjSeguradora.ReadOnly := True;
   btnImprimir.Visible := True;
   btnListagem.Visible := True;
end;

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

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

procedure TfrmCadManifesto.BtInserirClick(Sender: TObject);
var codigo : Integer;
begin
   //=============== Pega o maior codigo do manifesto gerada pela filial atual ================
   qryPesquisa.Close;
   qryPesquisa.SQL.Clear;
   qryPesquisa.SQL.Add(' SELECT MAX(MANIFESTO.COD_MANIFESTO) AS codigo ');
   qryPesquisa.SQL.Add(' FROM MANIFESTO                                ');
   qryPesquisa.SQL.Add(' WHERE MANIFESTO.COD_FILIAL_CADASTRO = :codFilial');
   qryPesquisa.SQL.Add(' and MANIFESTO.MODELO = ' + QuotedStr(Dados.tbParametro_Manifesto.FieldByName('MODELO').AsString) );
   qryPesquisa.ParamByName('codFilial').Value := Dados.qrFilial.FieldByName('COD_FILIAL').Value;
   qryPesquisa.Open;

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

   inherited;
   TbPrincipal.FieldByName('COD_MANIFESTO').Value       := codigo;
   TbPrincipal.FieldByName('DATA_CADASTRO').Value       := Date;
   TbPrincipal.FieldByName('HORA_CADASTRO').Value       := Time;
   TbPrincipal.FieldByName('DATA_VIAGEM').Value         := Date;
   TbPrincipal.FieldByName('HORA_VIAGEM').Value         := Time;

   TbPrincipal.FieldByName('MODELO').Value := Dados.tbParametro_Manifesto.FieldByName('MODELO').Value;
   TbPrincipal.FieldByName('SERIE').Value  := Dados.tbParametro_Manifesto.FieldByName('SERIE').Value;

   TbPrincipal.FieldByName('COD_USUARIO').Value         := Dados.qrUsuario.FieldByName('COD_USUARIO').Value;
   TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value := Dados.qrFilial.FieldByName('COD_FILIAL').Value;
   AtualizaTela;

   if qrSeguradora.RecordCount = 1 then
      qrSeguradora.First;

   btnImprimir.Visible := False;
   btnListagem.Visible := False;
   edtCnpjSeguradora.ReadOnly := True;
     
end;

procedure TfrmCadManifesto.BtEditarClick(Sender: TObject);
begin
  inherited;
   AtualizaTela;
end;

procedure TfrmCadManifesto.edtRotaChange(Sender: TObject);
begin
  inherited;
   if edtRota.Text = '' then
      edtCodRota.Clear
   else
      edtCodRota.Text := qrRota.FieldByName('cod_rota').AsString;
end;

procedure TfrmCadManifesto.BitBtn3Click(Sender: TObject);
begin
  inherited;
   PesquisaVeiculo1;
end;

procedure TfrmCadManifesto.BitBtn4Click(Sender: TObject);
begin
  inherited;
   PesquisaVeiculo2;
end;

procedure TfrmCadManifesto.edtMotoristaKeyDown(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 (edtMotorista.Focused) then
   begin
      PesquisaMotorista;
   end;
end;

procedure TfrmCadManifesto.edtPlaca1KeyDown(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 (edtPlaca1.Focused) then
   begin
      PesquisaVeiculo1;
   end;
end;

procedure TfrmCadManifesto.edtPlaca2KeyDown(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 (edtPlaca2.Focused) then
   begin
      PesquisaVeiculo2;
   end;

   if (Key =  VK_RETURN ) then
   begin
      pgOutros.ActivePage := tabNF;
      edtCodNF.SetFocus;
   end;
end;

procedure TfrmCadManifesto.BitBtn5Click(Sender: TObject);
var
  PesoTotal,
  PesoMaximoVeiculo: Real;
  num: integer;
begin
  inherited;

   if edtPlaca1.Text = '' then
   begin
      MessageDlg('Informe o veículo 1', mtWarning, [mbOK], 0);
      pgOutros.ActivePage := tabDados;
      edtPlaca1.SetFocus;
      Exit;
   end;                                                                                     

   qrPesquisaNF.Close;
   qrPesquisaNF.ParamByName('CODIGO').Value     := edtCodNF.Text;
   qrPesquisaNF.ParamByName('COD_FILIAL').Value := Dados.qrFilial.FieldByName('COD_FILIAL').Value;
   qrPesquisaNF.Open;

   if qrPesquisaNF.IsEmpty then
   begin
      MessageDlg('NF não encontrada', mtWarning, [mbOK], 0);
      edtCodNF.SetFocus;
      Exit;
   end;

   {==================================
      Não deixa manifestar uma NF q nao tenha data de emissao.
      Estava dando erro nos livro de registro de saida.
      O livro de saida lista os ctrc com base na data de emissao.
   ===================================}
   if qrPesquisaNF.FieldByName('DATA_EMISSAO').IsNull then
   begin
      MessageDlg('Esta NF não foi emitida.'+#13+#10+'Não é possível manisfestá-la', mtWarning, [mbOK], 0);
      edtCodNF.SetFocus;
      Exit;
   end;

   if qrPesquisaNF.FieldByName('COD_MANIFESTO').IsNotNull then
   begin
      if MessageDlg('Esta NF já está no Manifesto N°: '          + qrPesquisaNF.FieldByName('COD_MANIFESTO').AsString +#13+#10+
                    'Deseja alterar alterar para o Manifesto N°:' + TbPrincipal.FieldByName('COD_MANIFESTO').AsString , mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      begin
         if (MessageDlg('Confirma a mudança da NF N° ' + edtCodNF.Text  + #13+#10+
                        'atualmente no Manifesto N° ' + qrPesquisaNF.FieldByName('COD_MANIFESTO').AsString + #13+#10+
                        'para o Manifesto Atual N°  ' + TbPrincipal.FieldByName('COD_MANIFESTO').AsString + ' ?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
         begin
            edtCodNF.SetFocus;
            Exit;
         end
      end
      else
      begin
         edtCodNF.SetFocus;
         Exit;
      end;
   end;

   if qrVeiculo1.FieldByName('CAPACIDADE').AsFloat > qrVeiculo2.FieldByName('CAPACIDADE').AsFloat then
      PesoMaximoVeiculo := qrVeiculo1.FieldByName('CAPACIDADE').AsFloat
   else
      PesoMaximoVeiculo := qrVeiculo2.FieldByName('CAPACIDADE').AsFloat;

   PesoTotal := qrPesquisaNF.FieldByName('PESO_BRUTO').Value;

   if PesoTotal > PesoMaximoVeiculo then
   begin
      if (MessageDlg('O peso das NF ultrapassaram a Capacidade do veículo'+#13+#10+'Deseja cancelar a inclusão da NF?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
      begin
         edtCodNF.SetFocus;
         Exit;
      end
   end;

   if TbPrincipal.State in [dssInsert] then
   begin
    TbPrincipal.FieldByName('CPF_MOTORISTA').Value      := qrMotorista.FieldByName('CPF').Value;
    TbPrincipal.FieldByName('PLACA_VEICULO1').Value     := qrVeiculo1.FieldByName('PLACA').Value;
    TbPrincipal.FieldByName('PLACA_VEICULO2').Value     := qrVeiculo2.FieldByName('PLACA').Value;
    TbPrincipal.FieldByName('COD_ROTA').Value           := qrRota.FieldByName('COD_ROTA').Value;
    TbPrincipal.PostRetaining;
   end;

   qrPesquisaNF.Edit;
   qrPesquisaNF.FieldByName('COD_MANIFESTO').Value        := TbPrincipal.FieldByName('COD_MANIFESTO').Value ;
   qrPesquisaNF.FieldByName('COD_FILIAL_MANIFESTO').Value := TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value ;
   qrPesquisaNF.FieldByName('MODELO_MANIFESTO').Value     := TbPrincipal.FieldByName('MODELO').Value ;

   descricao_auditoria := 'Manifestou a NF ' + qrPesquisaNF.FieldByName('NUMERO').AsString + ' filial ' + qrPesquisaNF.FieldByName('cod_filial').AsString+
                          ' no manifesto n° ' + TbPrincipal.FieldByName('COD_MANIFESTO').AsString +  ' filial ' + TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsString;


   qrPesquisaNF.Post;
   qrPesquisaNF.Close;

   AtualizaMostraNF;

   num := StrToInt(edtCodNF.Text );
   edtCodNF.Text := IntToStr(num + 1);
   edtCodNF.SetFocus;

   qrNF.Locate('NUMERO', num , [])
end;

procedure TfrmCadManifesto.BtGravarClick(Sender: TObject);
var
  codigo: integer;
begin
   if edtRota.Text = '' then
   begin
      MessageDlg('Informe a Rota', mtWarning, [mbOK], 0);
      edtRota.SetFocus;
      Exit;
   end;

   if TbPrincipal.State in [dssInsert] then
   begin
      if edtDataViagem.Value = 0 then
      begin
         MessageDlg('Informe a data da viagem', mtWarning, [mbOK], 0);
         edtDataViagem.SetFocus;
         Exit;
      end;
   end;

   if edtDataViagem.Value < Date then
   begin
      if (MessageDlg('A data informada para a viagem a menor'+#13+#10+'que a data Atual.'+#13+#10+'Deseja continuar com o processo de gravação?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
      begin
         edtDataViagem.SetFocus;
         Exit;
      end;
   end;

   if edtHoraViagem.Field.IsNull then
   begin
      MessageDlg('Informe a hora da viagem', mtWarning, [mbOK], 0);
      edtHoraViagem.SetFocus;
      Exit;
   end;

   if edtMotorista.Text = '' then
   begin
      MessageDlg('Informe o motorista', mtWarning, [mbOK], 0);
      pgOutros.ActivePage := tabDados;
      edtMotorista.SetFocus;
      Exit;
   end;

   if edtPlaca1.Text = '' then
   begin
      MessageDlg('Informe a placa do veículo', mtWarning, [mbOK], 0);
      pgOutros.ActivePage := tabDados;
      edtPlaca1.SetFocus;
      Exit;
   end;


   if qrMotorista.FieldByName('VALIDADE_CNH').AsDate  <= Date then
   begin
     if (MessageDlg('A carteira de Habilitação do motorita está vencida'+#13+#10+'Deseja alterar o motorista?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
     begin
        pgOutros.ActivePage := tabDados;
        edtMotorista.SetFocus;
        Exit;
     end;
   end;

   {============================================
      No salvar verifica novamente o maior codigo do manifesto gerado
      isso para evitar erro de chave primaria  caso alguma estacao
      tb esteja cadastrando Manifestos ao mesmo tempo
   ============================================}
   if TbPrincipal.State in [dssInsert] then
   begin
      qryPesquisa.Close;
      qryPesquisa.SQL.Clear;
      qryPesquisa.SQL.Add(' SELECT MAX(MANIFESTO.COD_MANIFESTO) AS codigo ');
      qryPesquisa.SQL.Add(' FROM MANIFESTO                                ');
      qryPesquisa.SQL.Add(' WHERE MANIFESTO.COD_FILIAL_CADASTRO = :codFilial');
      qryPesquisa.SQL.Add(' and MANIFESTO.MODELO = ' + QuotedStr(Dados.tbParametro_Manifesto.FieldByName('MODELO').AsString) );
      qryPesquisa.ParamByName('codFilial').Value := Dados.qrFilial.FieldByName('COD_FILIAL').Value;

      qryPesquisa.Open;

      if qryPesquisa.FieldByName('CODIGO').AsInteger <> TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger then
         codigo := qryPesquisa.FieldByName('CODIGO').AsInteger + 1
      else
         codigo :=qryPesquisa.FieldByName('CODIGO').AsInteger;

      TbPrincipal.FieldByName('COD_MANIFESTO').Value := codigo;
   end;

   TbPrincipal.FieldByName('CPF_MOTORISTA').Value      := qrMotorista.FieldByName('CPF').Value;
   TbPrincipal.FieldByName('PLACA_VEICULO1').Value     := qrVeiculo1.FieldByName('PLACA').Value;
   TbPrincipal.FieldByName('PLACA_VEICULO2').Value     := qrVeiculo2.FieldByName('PLACA').Value;
   TbPrincipal.FieldByName('COD_ROTA').Value           := qrRota.FieldByName('COD_ROTA').Value;

   if edtRazaoSeguradora.Text <> '' then
      TbPrincipal.FieldByName('SEGURADORA_CNPJ').Value := qrSeguradora.FieldByName('CNPJ').Value
   else
      TbPrincipal.FieldByName('SEGURADORA_CNPJ').Value := Null;

   {============================================
      Coloca as placas dos veiculos na tabela de motorista
      para saber qual o ultimo veiculo utlizado por ele
   ============================================}

   qrMotorista.Edit;
   qrMotorista.FieldByName('ULTIMO_VEICULO_USADO1').Value := qrVeiculo1.FieldByName('PLACA').Value;
   qrMotorista.FieldByName('ULTIMO_VEICULO_USADO2').Value := qrVeiculo2.FieldByName('PLACA').Value;
   qrMotorista.Post;

   inherited;
  
   edtCnpjSeguradora.ReadOnly := True;
   btnImprimir.Visible := True;
   btnListagem.Visible := True;
end;

procedure TfrmCadManifesto.BitBtn6Click(Sender: TObject);
begin
   inherited;
   if (MessageDlg('Deseja realmente excluir a NF do Manifesto', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
      Exit;

   qrNF.Edit;
   qrNF.FieldByName('COD_MANIFESTO').Value        := Null;
   qrNF.FieldByName('COD_FILIAL_MANIFESTO').Value := Null;
   qrNF.FieldByName('MODELO_MANIFESTO').Value     := Null;

   descricao_auditoria := 'Retirou a NF ' + qrNF.FieldByName('NUMERO').AsString + ' filial ' + qrNF.FieldByName('cod_filial').AsString+
                          ' do manifesto n° ' + TbPrincipal.FieldByName('COD_MANIFESTO').AsString +  ' filial ' + TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsString;

   GravaAuditoria(False,qrNF);
   qrNF.Post;

   AtualizaMostraNF;
end;

procedure TfrmCadManifesto.btnImprimirClick(Sender: TObject);
begin
  inherited;
//   if TbPrincipal.FieldByName('CHAVE_ACESSO').AsString <> '' then
//   begin
//      DMNFE.MDFe_Imprimir_Individual(TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger , TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsInteger);
//      Exit;
//   end;

   Dados.script.sql.Clear;
   Dados.script.sql.Add(' update PARAMETRO_RELATORIO set PARAMETRO_RELATORIO.INTEIRO_1 = ' + TbPrincipal.FieldByName('COD_MANIFESTO').AsString + ';' );
   Dados.script.sql.Add(' update PARAMETRO_RELATORIO set PARAMETRO_RELATORIO.INTEIRO_2 = ' + TbPrincipal.FieldByName('COD_MANIFESTO').AsString + ';' );
   Dados.script.sql.Add(' update PARAMETRO_RELATORIO set PARAMETRO_RELATORIO.INTEIRO_3 = ' + TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsString + ';' );
   Dados.script.sql.Add(' update PARAMETRO_RELATORIO set PARAMETRO_RELATORIO.string_1 = '  + QuotedStr( Dados.tbConfig.FieldByName('LOCAL_IMAGENS').AsString+'cabecalho.jpg' ));

   Dados.script.Execute;

   ImprimeRelatorio('IMPRESSAO_MANIFESTO',True,True,'');
end;

procedure TfrmCadManifesto.btnPesquisaSeguradoraClick(Sender: TObject);
begin
  inherited;
   //==================== Pesquisa rotas ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrSeguradoraPesquisa;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Seguradora';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrSeguradora.Locate('CNPJ', frmModeloPesquisa.TbPrincipal.FieldByName('CNPJ').Value ,[]);
      edtCnpjSeguradora.Text := qrSeguradora.FieldByName('CNPJ').AsString;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadManifesto.edtCnpjSeguradoraKeyDown(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 (edtCnpjSeguradora.Focused) then
   begin
      btnPesquisaSeguradora.Click ;
   end;

end;

procedure TfrmCadManifesto.edtRazaoSeguradoraChange(Sender: TObject);
begin
  inherited;
   if edtRazaoSeguradora.Text = '' then
   begin
      edtCnpjSeguradora.Clear;
      Exit;
   end
   else
      edtCnpjSeguradora.Text := qrSeguradora.FieldByName('CNPJ').AsString;

   edtCnpjSeguradora.EditMask := MascaraCNPJ_CPF(edtCnpjSeguradora.Text);
end;

procedure TfrmCadManifesto.edtCnpjSeguradoraExit(Sender: TObject);
var CNPJ : string;
   erro,
    tipoPessoa :string;
begin
  inherited;
   CNPJ:= LimpaTexto(edtCnpjSeguradora.Text);
   if cnpj = '' then
   begin
      if not qrSeguradora.Bof then
      begin
         qrSeguradora.First;
         qrSeguradora.Prior;
      end;
      edtCnpjSeguradora.Clear;
      Exit;
   end;

   edtCnpjSeguradora.Clear;

   if Length(CNPJ) <> 14 then
   begin
      MessageDlg('Somente CNPJ ', mtWarning, [mbOK], 0);
      edtCnpjSeguradora.SetFocus;
      Exit;
   end;

   if ValidaCNPJCEICPF(CNPJ,tipoPessoa,erro)= False then
   begin
      MessageDlg(erro, mtWarning, [mbOK], 0);
      edtCnpjSeguradora.SetFocus;
      Exit;
   end;

   edtCnpjSeguradora.EditMask := MascaraCNPJ_CPF(edtCnpjSeguradora.Text);
   //============== Verifica se o cnpj existe ============
   qryPesquisa.Close;
   qryPesquisa.SQL.Clear;
   qryPesquisa.SQL.Add(' SELECT SEGURADORA.CNPJ  FROM SEGURADORA where SEGURADORA.cnpj = '+#39+ CNPJ + #39 );
   qryPesquisa.Open;

   //============== Se o cnpj nao existir chama a tela de cadastro de Seguradora ============
   if qryPesquisa.IsEmpty then
   begin
      frmCadSeguradora  := TfrmCadSeguradora.Create(Application);
      frmCadSeguradora.OutraTela := True;
      frmCadSeguradora.BtInserirClick(Self);
      frmCadSeguradora.TbPrincipal.FieldByName('cnpj').Value := CNPJ;
      frmCadSeguradora.ShowModal;
       //============== Localiza o no novo cliente cadastrado ============
      qrSeguradora.RefreshAll;
      if not qrSeguradora.Locate('CNPJ' , CNPJ, [] )  then
      begin
         if not qrSeguradora.Bof then
         begin
            qrSeguradora.First;
            qrSeguradora.Prior;
         end;
         edtCnpjSeguradora.Clear;
         edtCnpjSeguradora.SetFocus;
      end
      else
         edtCnpjSeguradora.Text := qrSeguradora.FieldByName('cnpj').AsString;

      frmCadSeguradora.Destroy;
      Screen.OnActiveControlChange := TrocaCor;
   end
   else
   begin
      qrSeguradora.Locate('CNPJ', CNPJ, [])
   end;
end;

procedure TfrmCadManifesto.btnEditar2Click(Sender: TObject);
begin
  inherited;
   edtCnpjSeguradora.ReadOnly := False;
   btnImprimir.Visible := False;
   btnListagem.Visible := False;
end;

procedure TfrmCadManifesto.edtMotoristaChange(Sender: TObject);
begin
  inherited;
   if TbPrincipal.State in [dssInsert] then
      Ultimo_Veiculo_Usado;
end;

procedure TfrmCadManifesto.btnListagemClick(Sender: TObject);
begin
  inherited;
   qrLista.Close;
   qrLista.ParamByName('codmanifesto').Value    := TbPrincipal.FieldByName('COD_MANIFESTO').Value ;
   qrLista.ParamByName('codFilial').Value       := TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value ;
   qrLista.ParamByName('modeloManifesto').Value := TbPrincipal.FieldByName('MODELO').Value ;
   qrLista.Open;

   ImpressaoBaseadaNoModelo(RelatLista,True,'Lista de Manifesto','');
end;

procedure TfrmCadManifesto.btnBuscarNFClick(Sender: TObject);
begin
   inherited;
   frmBuscaNFeParaManifestar := TfrmBuscaNFeParaManifestar.Create(Application);
   if frmBuscaNFeParaManifestar.ShowModal = MrOk then
   begin
      if not frmBuscaNfeParaManifestar.qrSelecionaNF.Bof then
         frmBuscaNfeParaManifestar.qrSelecionaNF.First;

      while not frmBuscaNFeParaManifestar.qrSelecionaNF.Eof do
      begin
         if frmBuscaNFeParaManifestar.qrSelecionaNF.FieldByName('selecao').AsString = 'T' then
         begin

            if TbPrincipal.State in [dssInsert] then
             begin
              TbPrincipal.FieldByName('CPF_MOTORISTA').Value      := qrMotorista.FieldByName('CPF').Value;
              TbPrincipal.FieldByName('PLACA_VEICULO1').Value     := qrVeiculo1.FieldByName('PLACA').Value;
              TbPrincipal.FieldByName('PLACA_VEICULO2').Value     := qrVeiculo2.FieldByName('PLACA').Value;
              TbPrincipal.FieldByName('COD_ROTA').Value           := qrRota.FieldByName('COD_ROTA').Value;
              TbPrincipal.PostRetaining;
             end;

            qrPesquisaNF.Close;
            qrPesquisaNF.ParamByName('CODIGO').Value     := frmBuscaNFeParaManifestar.qrSelecionaNF.FieldByName('NUMERO').Value;
            qrPesquisaNF.ParamByName('COD_FILIAL').Value := frmBuscaNFeParaManifestar.qrSelecionaNF.FieldByName('COD_FILIAL').Value;
            qrPesquisaNF.Open;

            qrPesquisaNF.Edit;
            qrPesquisaNF.FieldByName('COD_MANIFESTO').Value        := TbPrincipal.FieldByName('COD_MANIFESTO').Value ;
            qrPesquisaNF.FieldByName('COD_FILIAL_MANIFESTO').Value := TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value ;
            qrPesquisaNF.FieldByName('MODELO_MANIFESTO').Value     := TbPrincipal.FieldByName('modelo').Value ;

            descricao_auditoria := 'Manifestou a NF ' + qrPesquisaNF.FieldByName('NUMERO').AsString + ' filial ' + qrPesquisaNF.FieldByName('cod_filial').AsString+
                                   ' no manifesto n° ' + TbPrincipal.FieldByName('COD_MANIFESTO').AsString +  ' filial ' + TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsString;

            GravaAuditoria(False,qrPesquisaNF);

            qrPesquisaNF.Post;
            qrPesquisaNF.Close;
            AtualizaMostraNF;

            Application.ProcessMessages;
         end;

         frmBuscaNFeParaManifestar.qrSelecionaNF.Next;
      end
   end;
   frmBuscaNFeParaManifestar.Destroy;
end;

procedure TfrmCadManifesto.btnTransmitirClick(Sender: TObject);
begin
  inherited;

   Application.ProcessMessages;

   DMNFE.MDNFe_Gerar_XML(TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger , TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsInteger);

   DMNFE.MDNFe_ValidarXml;

   lblVerificarprotocolo.Caption := 'Transmitindo. Aguarde';
   Application.ProcessMessages;

   DMNFE.MDNFe_Transmitir(TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger , TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsInteger);

   lblVerificarprotocolo.Caption := '';


   TbPrincipal.Refresh;
   btnImprimir.Click;
end;

procedure TfrmCadManifesto.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  DMNFE.Destroy;
end;

procedure TfrmCadManifesto.btnVerificarProtocoloCteClick(Sender: TObject);
begin
  inherited;                          
   lblVerificarprotocolo.Caption := 'Estamos verificando. Aguarde';
   Application.ProcessMessages;
   DMNFE.MDNFe_Consulta_Protocolo(TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger , TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsInteger);
   lblVerificarprotocolo.Caption := '';
   TbPrincipal.Refresh;

end;

procedure TfrmCadManifesto.cxButton1Click(Sender: TObject);
begin
  inherited;
   if (MessageDlg('Deseja realmemente encerrar este Manifesto?'+#13+#10+'Isto indica que a carga chegou a seu destino.', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
      Exit;

   lblVerificarprotocolo.Caption := 'Encerrrando. Aguarde...';
   Application.ProcessMessages;
   DMNFE.MDNFe_Encerramento(TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger , TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsInteger);
   lblVerificarprotocolo.Caption := '';

   TbPrincipal.Refresh;
   MessageDlg('Encerrado com sucesso', mtInformation, [mbOK], 0);
end;

procedure TfrmCadManifesto.cxButton2Click(Sender: TObject);
var motivo : string;
begin
  inherited;
   if (MessageDlg('Deseja realmemente Cancelar este Manifesto?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
      Exit;

   frmJustificativa := TfrmJustificativa.Create(Application);
   if frmJustificativa.ShowModal <> mrok then
   begin
      frmJustificativa.destroy;
      Exit;
   end;

   motivo := frmJustificativa.mmJustificativa.Text;
   frmJustificativa.destroy;


   lblVerificarprotocolo.Caption := 'Cancelando. Aguarde...';
   Application.ProcessMessages;
   DMNFE.MDNFe_Cancelar (TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger , TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsInteger, motivo);
   lblVerificarprotocolo.Caption := '';

   TbPrincipal.Refresh;
   MessageDlg('Cancelado com sucesso', mtError, [mbOK], 0);

end;

procedure TfrmCadManifesto.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('PROTOCOLO_ENCERRAMENTO').AsString = '' then
     begin
        AFont.Color := clred;
     end;
   end;

end;

procedure TfrmCadManifesto.btn1Click(Sender: TObject);
begin
  inherited;
  frmCadRota := TfrmCadRota.Create(Application);
  frmCadRota.OutraTela := True;
  frmCadRota.BtInserirClick(Self);
  frmCadRota.ShowModal;

   //============== Localiza a Nova Rota cadastrada ============

  tbPrincipal.FieldByName('COD_ROTA').Value:=frmCadRota.TbPrincipal.FieldByName('COD_ROTA').Value;
  frmCadRota.Destroy;
  qrRota.RefreshAll;
  AtualizaTela;
  Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadManifesto.btnVerificaWebServiceClick(Sender: TObject);
begin
  inherited;
  DMNFE.MDFe_Consultar_Status_WebService;

end;

procedure TfrmCadManifesto.btn2Click(Sender: TObject);
begin
  inherited;
  frmCadVeiculo := TfrmCadVeiculo.Create(Application);
  frmCadVeiculo.OutraTela := True;
  frmCadVeiculo.BtInserirClick(Self);
  frmCadVeiculo.ShowModal;

   //============== Localiza o novo Veículo cadastrado ============

  tbPrincipal.FieldByName('PLACA_VEICULO1').Value:=frmCadVeiculo.TbPrincipal.FieldByName('PLACA').Value;
  frmCadVeiculo.Destroy;
  qrVeiculo1.Close;
  qrVeiculo1.Open;
  if not qrVeiculo1.Locate('PLACA',tbPrincipal.FieldByName('PLACA_VEICULO1').Value,[]) then
  begin
    if not qrVeiculo1.Bof then
    begin
       qrVeiculo1.First;
       qrVeiculo1.Prior;
    end;
  end;
  Screen.OnActiveControlChange := TrocaCor;


end;

procedure TfrmCadManifesto.btn3Click(Sender: TObject);
begin
  inherited;
  frmCadMotorista := TfrmCadMotorista.Create(Application);
  frmCadMotorista.OutraTela := True;
  frmCadMotorista.BtInserirClick(Self);
  frmCadMotorista.ShowModal;

   //============== Localiza o novo Motorista cadastrado ============

  tbPrincipal.FieldByName('CPF_MOTORISTA').Value:=frmCadMotorista.TbPrincipal.FieldByName('CPF').Value;
  frmCadMotorista.Destroy;
  qrMotorista.Close;
  qrMotorista.Open;
  if not qrMotorista.Locate('CPF',tbPrincipal.FieldByName('CPF_MOTORISTA').Value,[]) then
  begin
    if not qrMotorista.Bof then
    begin
       qrMotorista.First;
       qrMotorista.Prior;
    end;
  end;
  Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadManifesto.imgGerarXMLClick(Sender: TObject);
begin
   DMNFE.MDNFe_Gerar_XML(TbPrincipal.FieldByName('COD_MANIFESTO').AsInteger , TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').AsInteger);
   DMNFE.MDNFe_ValidarXml;
end;

procedure TfrmCadManifesto.btn6Click(Sender: TObject);
begin
  inherited;
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrUF_Transporte;
   frmModeloPesquisa.lblTitulo.Caption := 'Pesquisa UF';
   if frmModeloPesquisa.ShowModal = mrOk then
      qrUF_Transporte.Locate('DESCRICAO' , frmModeloPesquisa.TbPrincipal.FieldByName('DESCRICAO').Value , []);
   frmModeloPesquisa.Destroy;

   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadManifesto.btnPercursoAddClick(Sender: TObject);
begin
  inherited;
    TbPrincipal.FieldByName('CPF_MOTORISTA').Value      := qrMotorista.FieldByName('CPF').Value;
    TbPrincipal.FieldByName('PLACA_VEICULO1').Value     := qrVeiculo1.FieldByName('PLACA').Value;
    TbPrincipal.FieldByName('PLACA_VEICULO2').Value     := qrVeiculo2.FieldByName('PLACA').Value;
    TbPrincipal.FieldByName('COD_ROTA').Value           := qrRota.FieldByName('COD_ROTA').Value;
    TbPrincipal.PostRetaining;

    qrPercurso.Insert;
    qrPercurso.FieldByName('COD_MAN_PERCURSO').Value:= Proximo_Codigo_Tabela('MANIFESTO_PERCURSO','COD_MAN_PERCURSO');
    qrPercurso.FieldByName('COD_MANIFESTO').Value   := TbPrincipal.FieldByName('COD_MANIFESTO').Value;
    qrPercurso.FieldByName('COD_FILIAL').Value      := TbPrincipal.FieldByName('COD_FILIAL_CADASTRO').Value;
    qrPercurso.FieldByName('MODELO').Value          := TbPrincipal.FieldByName('MODELO').Value;
    qrPercurso.FieldByName('UF').Value              := edtUfTransporte.Text;
    qrPercurso.Post;
end;

procedure TfrmCadManifesto.btnPercursoDelClick(Sender: TObject);
begin
  inherited;
  qrPercurso.Delete;

end;

end.
