unit CadContasPagar;

interface

uses
  Windows, system.UItypes, IB_Access,  Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ModeloCadastro, UCBase, ImgList, AppEvnts, IB_Components,
  ExtCtrls, StdCtrls, jpeg, Grids, IB_Grid, Buttons, ComCtrls, Mask,
  IB_Controls, Menus, Rotinas, IB_EditButton, System.ImageList, cxGraphics,
  cxLookAndFeels, cxLookAndFeelPainters, dxSkinsCore, dxSkinOffice2010Blue, cxButtons;

type
  TfrmCadContasPagar = class(TFrModeloCadastro)
    GroupBox2: TGroupBox;
    dbCodigo: TIB_Text;
    edtDataCad: TIB_Edit;
    edtVenc: TIB_Date;
    edtValor: TIB_Currency;
    edtDescricao: TIB_Edit;
    edtUsuario: TIB_Edit;
    qrUsuarioCad: TIB_Query;
    dsrUsuario: TIB_DataSource;
    edtTipoConta: TIB_LookupCombo;
    qrTipoConta: TIB_Query;
    dsrTipoConta: TIB_DataSource;
    btnPagar: TBitBtn;
    pnlPgto: TGroupBox;
    IB_Date1: TIB_Date;
    IB_Currency1: TIB_Currency;
    IB_Currency2: TIB_Currency;
    IB_Currency3: TIB_Currency;
    IB_Currency4: TIB_Currency;
    qrFormaPgto: TIB_Query;
    dsrFormaPgto: TIB_DataSource;
    IB_Text1: TIB_Text;
    Label3: TLabel;
    IB_Currency5: TIB_Currency;
    btnReabrir: TBitBtn;
    qryDocumentoTipo: TIB_Query;
    dtDocumentoTipo: TIB_DataSource;
    edtDocumentoNumero: TIB_Edit;
    PageControl1: TPageControl;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    dbObservacao: TIB_Memo;
    dbStatus: TIB_LookupCombo;
    qryStatus: TIB_Query;
    dtStatus: TIB_DataSource;
    popCopiar: TPopupMenu;
    CopiarCNPJ1: TMenuItem;
    qrFornecedor: TIB_Query;
    dsrFornecedor: TIB_DataSource;
    imgPago: TImage;
    pnlCancelado: TPanel;
    Label6: TLabel;
    IB_Memo5: TIB_Memo;
    edtDocumentoTipo: TIB_LookupCombo;
    dbDataPrevisao: TIB_Date;
    edtGrupo: TIB_LookupCombo;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    lbl6: TLabel;
    IB_Text9: TIB_Text;
    IB_Text6: TIB_Text;
    lbl7: TLabel;
    btnRepetir: TBitBtn;
    IB_Text2: TIB_Text;
    Label4: TLabel;
    IB_Text3: TIB_Text;
    Label5: TLabel;
    IB_Text4: TIB_Text;
    Label7: TLabel;
    IB_Text5: TIB_Text;
    Label8: TLabel;
    edtCNPJ: TLabeledEdit;
    edtCodPlanoConta: TEdit;
    edtPlanoConta: TIB_LookupCombo;
    cxButton1: TcxButton;
    cxButton2: TcxButton;
    btnPesquisaFornecedor: TcxButton;
    btnPesquisaTipoConta: TcxButton;
    btnNovoTipoConta: TcxButton;
    btnPesquisaTipoDocumento: TcxButton;
    btnNovoTipoDocumento: TcxButton;
    btnNovoFornecedor: TcxButton;
    qrPlanoConta: TIB_Query;
    dsrPlanoConta: TIB_DataSource;

    procedure FormCreate(Sender: TObject);
    procedure BtGravarClick(Sender: TObject);
    procedure BtInserirClick(Sender: TObject);
    procedure BtEditarClick(Sender: TObject);
    procedure BtExcluirClick(Sender: TObject);
    procedure BtCancelarClick(Sender: TObject);
    procedure BtAnteriorClick(Sender: TObject);
    procedure BtProximoClick(Sender: TObject);
    procedure btnPesquisaTipoContaClick(Sender: TObject);
    procedure btnNovoTipoContaClick(Sender: TObject);
    procedure btnPagarClick(Sender: TObject);
    procedure btnReabrirClick(Sender: TObject);
    procedure btnEditar2Click(Sender: TObject);
    procedure btnPesquisaTipoDocumentoClick(Sender: TObject);
    procedure btnNovoTipoDocumentoClick(Sender: TObject);
    procedure btnPesquisaFornecedorClick(Sender: TObject);
    procedure edtCNPJExit(Sender: TObject);
    procedure edtCNPJEnter(Sender: TObject);
    procedure edtCNPJKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnNovoFornecedorClick(Sender: TObject);
    procedure edtCodPlanoContaExit(Sender: TObject);
    procedure cxButton1Click(Sender: TObject);
    procedure cxButton2Click(Sender: TObject);
    procedure edtPlanoContaChange(Sender: TObject);
    procedure btnRepetirClick(Sender: TObject);
    procedure edtTipoContaChange(Sender: TObject);
    procedure edtVencExit(Sender: TObject);
  private
     procedure AtualizaTela;
    function CadastrarFornecedor: Boolean;
    procedure MontaMascaraCPF_CNPJ;
    function LocalizaFornecedor(CNPJ: string): Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmCadContasPagar: TfrmCadContasPagar;

implementation

uses DataModulo, ModeloPesquisa, CadTipoConta, Math, Pagamento,
  CadTipoDocumento, CadFornecedor, LancamentoParcelas;

{$R *.dfm}

{ TfrmCadContasPagar }

procedure TfrmCadContasPagar.AtualizaTela;
begin
   //=============== Atualiza a visualizacao dos dados ================
   qrFornecedor.RefreshAll;

   if not qrFornecedor.Locate('COD_FORNECEDOR',TbPrincipal.FieldByName('COD_FORNECEDOR').Value , []) then
   begin
      InicioDaTabela(qrFornecedor);
      edtCnpj.Clear;
   end
   else
     edtCnpj.Text := qrFornecedor.FieldByName('CNPJ').AsString;

  if BtInserir.Visible and TbPrincipal.FieldByName('DATA_PAGAMENTO').IsNotNull then
  begin
     btnReabrir.Visible := True;
     btnPagar.Visible   := False;
  end
  else
  begin
     btnReabrir.Visible := False;
     btnPagar.Visible   := True;
  end;

   //===================== Atualiza a visualizacao dos dados =====================

   if not qrUsuarioCad.Locate('COD_USUARIO', TbPrincipal.FieldByName('COD_USUARIO_CAD').Value , []) then
      InicioDaTabela(qrUsuarioCad);

   if not qrTipoConta.Locate('COD_TIPO_CONTA' , TbPrincipal.FieldByName('COD_TIPO_CONTA').Value  ,  [] ) then
      InicioDaTabela(qrTipoConta);

   if not qryStatus.Locate('COD_STATUS_CONTA' , TbPrincipal.FieldByName('COD_STATUS').Value  ,  [] ) then
      InicioDaTabela(qryStatus);

   if not  qrPlanoConta.Locate('COD_PLANO_CONTA' , TbPrincipal.FieldByName('COD_PLANO_CONTA').Value  ,  [] ) then
      InicioDaTabela(qrPlanoConta);

   if not qrFormaPgto.Locate('COD_FORMA_PAGAMENTO', TbPrincipal.FieldByName('COD_FORMA_PAGAMENTO').Value , [] ) then
      InicioDaTabela(qrFormaPgto);

   if not qryDocumentoTipo.Locate('COD_TIPO_DOCUMENTO', TbPrincipal.FieldByName('DOCUMENTO_TIPO').Value , [] ) then
      InicioDaTabela(qryDocumentoTipo);

   if TbPrincipal.FieldByName('DATA_PAGAMENTO').AsDate <> 0 then
   begin
      pnlPgto.Visible    := True;
      imgPago.Visible    := pnlPgto.Visible;
      btnPagar.Visible   := False;
      btnReabrir.Visible := True;

   end
   else
   begin
      pnlPgto.Visible    := False;
      imgPago.Visible    := pnlPgto.Visible;
      btnPagar.Visible   := True;
      btnReabrir.Visible := False;
   end;

   if ((TbPrincipal.State in [DssInsert]) or (TbPrincipal.State in [DssEdit])) and (TbPrincipal.Modified) then
   begin
      pnlPgto.Visible     := False;
      imgPago.Visible     := pnlPgto.Visible;
      btnPagar.Visible    := False;
      btnReabrir.Visible  := False;
      btnRepetir.Visible  := False;
   end;

   if TbPrincipal.FieldByName('COD_STATUS').AsInteger = 4 then
      pnlCancelado.Visible := true
   else
      pnlCancelado.Visible := False;

end;

procedure TfrmCadContasPagar.FormCreate(Sender: TObject);
begin
   Gera_Codigo := True;
   inherited;
   InicioDaTabela(qrUsuarioCad);
   InicioDaTabela(qrTipoConta);
   InicioDaTabela(qrFormaPgto);
   InicioDaTabela(qryDocumentoTipo);
   InicioDaTabela(qryStatus);
   InicioDaTabela(qrFornecedor);
   InicioDaTabela(qrPlanoConta);
end;

procedure TfrmCadContasPagar.BtGravarClick(Sender: TObject);
begin
   if Trim(edtDescricao.Text ) = '' then
   begin
      MessageDlg('Informe a descrição', mtWarning, [mbOK], 0);
      edtDescricao.SetFocus;
      Exit;
   end;

   if dbStatus.Text = '' then
   begin
      MessageDlg('Informe o STATUS da conta', mtError, [mbOK], 0);
      Exit;
      dbStatus.SetFocus;
   end;

   if edtTipoConta.Text = '' then
   begin
      MessageDlg('Informe o tipo de conta', mtWarning, [mbOK], 0);
      edtTipoConta.SetFocus;
      Exit;
   end;

   if edtDocumentoNumero.Text = '' then
   begin
      MessageDlg('Informe o numero do documento', mtWarning, [mbOK], 0);
      edtDocumentoNumero.SetFocus;
      Exit;
   end;

   if edtValor.Value = 0 then
   begin
      MessageDlg('Informe o valor', mtWarning, [mbOK], 0);
      edtValor.SetFocus;
      Exit;
   end;

   if edtVenc.Value = 0 then
   begin
      MessageDlg('Informe a data de Vencimento', mtWarning, [mbOK], 0);
      edtVenc.SetFocus;
      Exit;
   end;

   if edtVenc.Value < Date then
   begin
      if (MessageDlg('A data de vencimento é menor que a data atual.'+#13+#10+'Deseja continuar?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
         Exit;
   end;

   if edtPlanoConta.Text = '' then
   begin
      MessageDlg('Informe o plano de contas', mtWarning, [mbOK], 0);
      edtPlanoConta.SetFocus;
      Exit;
   end;


   if qrFornecedor.FieldByName('COD_FORNECEDOR').AsInteger  = 0 then
   begin
      MessageDlg('Informe o Fornecedor', mtError, [mbOK], 0);
      Exit;
      edtCNPJ.SetFocus;
   end;

   if edtTipoConta.Text  <> '' then
      TbPrincipal.FieldByName('COD_TIPO_CONTA').Value := qrTipoConta.FieldByName('COD_TIPO_CONTA').Value;

   if edtDocumentoTipo.Text  <> '' then
      TbPrincipal.FieldByName('DOCUMENTO_TIPO').Value := qryDocumentoTipo.FieldByName('COD_TIPO_DOCUMENTO').Value;

   if edtPlanoConta.Text  <> '' then
      TbPrincipal.FieldByName('COD_PLANO_CONTA').Value := qrPlanoConta.FieldByName('COD_PLANO_CONTA').Value;

   TbPrincipal.FieldByName('COD_STATUS').Value     := qryStatus.FieldByName('COD_STATUS_CONTA').Value;

   TbPrincipal.FieldByName('COD_FORNECEDOR').Value := qrFornecedor.FieldByName('COD_FORNECEDOR').Value;

   inherited;

   btnPagar.Visible := True;
   btnRepetir.Visible := True;

end;

procedure TfrmCadContasPagar.BtInserirClick(Sender: TObject);
begin
  inherited;
   TbPrincipal.FieldByName('COD_USUARIO_CAD').Value := Dados.qrUsuario.FieldByName('COD_USUARIO').Value;
   TbPrincipal.FieldByName('DATA_CAD').Value        := Date;
   TbPrincipal.FieldByName('HORA_CAD').Value        := Time;

   AtualizaTela;
   btnPagar.Visible := False;
   btnRepetir.Visible := False;
end;

procedure TfrmCadContasPagar.BtEditarClick(Sender: TObject);
begin
  inherited;
   AtualizaTela;
   btnRepetir.Visible := true;
end;

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

procedure TfrmCadContasPagar.BtCancelarClick(Sender: TObject);
begin
  inherited;
   AtualizaTela;
   btnPagar.Visible := True;
   btnRepetir.Visible := True;
end;

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

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

procedure TfrmCadContasPagar.btnPesquisaTipoContaClick(Sender: TObject);
begin
  inherited;
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrTipoConta;
   frmModeloPesquisa.lblTitulo.Caption := 'Pesquisa Tipos de Contas';
   if frmModeloPesquisa.ShowModal = mrOk then
      qrTipoConta.Locate('COD_TIPO_CONTA' , frmModeloPesquisa.TbPrincipal.FieldByName('COD_TIPO_CONTA').Value , []);
   frmModeloPesquisa.Destroy;

   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadContasPagar.btnNovoTipoContaClick(Sender: TObject);
begin
  inherited;
   frmCadTipoConta := TfrmCadTipoConta.Create(Application);
   frmCadTipoConta.OutraTela := True;
   frmCadTipoConta.BtInserir.Click;
   frmCadTipoConta.ShowModal;
   frmCadTipoConta.Destroy;
   qrTipoConta.Close;
   qrTipoConta.Open;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadContasPagar.btnPagarClick(Sender: TObject);
begin
  inherited;
   frmPgamento := TfrmPgamento.Create(Application);
   frmPgamento.valorDoc := TbPrincipal.FieldByName('VALOR').AsCurrency;

   frmPgamento.edtDataPgto.Value := Date;

   frmPgamento.edtMulta.Value     := 0;
   frmPgamento.edtJuros.Value     := 0;
   frmPgamento.edtOutros.Value    := 0;
   frmPgamento.edtDesconto.Value  := 0;
   frmPgamento.edtValorTotal.Value:= 0;
   frmPgamento.edtDataPgto.Value  := Date;
   frmPgamento.ObsCheque  := 'Refente ao pgto da conta cod: ' +  TbPrincipal.FieldByName('COD_CONTA_PAGAR').AsString + #13 +
                             TbPrincipal.FieldByName('DESCRICAO').AsString + #13 +
                             ' com vencimento em '  + TbPrincipal.FieldByName('DATA_VENC').AsString + #13 +
                             ' no valor de ' + TbPrincipal.FieldByName('VALOR').AsString;

   frmPgamento.Tabela_relacionada := 'CONTAS_PAGAR';
   frmPgamento.cod_tabela_relacionada := TbPrincipal.FieldByName('COD_CONTA_PAGAR').AsString;

   if frmPgamento.ShowModal = MROK then
   begin
      btnEditar2.Click;
      TbPrincipal.FieldByName('MULTA').Value            := frmPgamento.edtMulta.Value;
      TbPrincipal.FieldByName('JUROS').Value            := frmPgamento.edtJuros.Value;
      TbPrincipal.FieldByName('OUTROS').Value  := frmPgamento.edtOutros.Value;
      TbPrincipal.FieldByName('DESCONTO').Value         := frmPgamento.edtDesconto.Value;
      TbPrincipal.FieldByName('DATA_PAGAMENTO').Value        := frmPgamento.edtDataPgto.Value;
      TbPrincipal.FieldByName('VALOR_PAGAMENTO').Value        := frmPgamento.edtValorTotal.Value;
      TbPrincipal.FieldByName('DATA_REALIZADO').Value         := frmPgamento.edtDataPgto.Value;
      TbPrincipal.FieldByName('COD_USUARIO_BAIXA').Value  := DADOS.qrusuario.FieldByName('COD_USUARIO').Value;
      TbPrincipal.FieldByName('COD_FORMA_PAGAMENTO').Value    := frmPgamento.qrFormaPgto.FieldByName('COD_FORMA_PAGAMENTO').Value;
      TbPrincipal.FieldByName('COD_CONTA_BANCARIA').Value     := frmPgamento.qrContaBancaria.FieldByName('COD_CONTA_BANCARIA').Value;

      if TbPrincipal.FieldByName('DATA_PREVISAO').IsNull  then
         TbPrincipal.FieldByName('DATA_PREVISAO').Value := frmPgamento.edtDataPgto.Value;

      if frmPgamento.qrFormaPgto.FieldByName('PGTO_A_VISTA').asstring = 'T' then
      begin
       TbPrincipal.FieldByName('DATA_CREDITO').Value    := frmPgamento.edtDataPgto.Value;
       TbPrincipal.FieldByName('VALOR_CREDITADO').Value := frmPgamento.edtValorTotal.Value;
      end;


      BtGravar.Click;
   end;

   frmPgamento.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   AtualizaTela;

{
   frmPgamento := TfrmPgamento.Create(Application);
   frmPgamento.Pagamento_Tabela:='CONTAS_PAGAR';
   frmPgamento.valorDoc := TbPrincipal.FieldByName('VALOR').AsCurrency;
   if frmPgamento.ShowModal = MROK then
   begin
      btnEditar2.Click;
      TbPrincipal.FieldByName('MULTA').Value            := frmPgamento.edtMulta.Value;
      TbPrincipal.FieldByName('JUROS').Value            := frmPgamento.edtJuros.Value;
      TbPrincipal.FieldByName('OUTROS').Value           := frmPgamento.edtJuros.Value;
      TbPrincipal.FieldByName('DESCONTO').Value         := frmPgamento.edtDesconto.Value;
      TbPrincipal.FieldByName('VALOR_PAGAMENTO').Value  := frmPgamento.edtValorTotal.Value;
      TbPrincipal.FieldByName('DATA_PAGAMENTO').Value   := frmPgamento.edtDataPgto.Value;
      TbPrincipal.FieldByName('COD_USUARIO_BAIXA').Value:= DADOS.qrusuario.FieldByName('COD_USUARIO').Value;
      TbPrincipal.FieldByName('COD_FORMA_PAGAMENTO').Value:= frmPgamento.qrFormaPgto.FieldByName('COD_FORMA_PAGAMENTO').Value;

      BtGravar.Click;
   end;

   frmPgamento.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   AtualizaTela;
 }
end;

procedure TfrmCadContasPagar.btnReabrirClick(Sender: TObject);
begin
  inherited;
   if (MessageDlg('Deseja realmente cancelar o pagamento?', mtWarning, [mbYes, mbNo], 0) = mrNo) then
      Exit;

   btnEditar2.Click;
   TbPrincipal.FieldByName('MULTA').Value            := Null ;
   TbPrincipal.FieldByName('JUROS').Value            := Null ;
   TbPrincipal.FieldByName('OUTROS').Value           := Null ;
   TbPrincipal.FieldByName('DESCONTO').Value         := Null ;
   TbPrincipal.FieldByName('VALOR_PAGAMENTO').Value  := Null ;
   TbPrincipal.FieldByName('DATA_PAGAMENTO').Value   := Null ;
   TbPrincipal.FieldByName('COD_USUARIO_BAIXA').Value:= Null ;
   BtGravar.Click;
   AtualizaTela;
end;

procedure TfrmCadContasPagar.btnRepetirClick(Sender: TObject);
var codigo
  , cod_plano_conta
  , cod_tipo_documento
  , COD_TIPO_CONTA
  , COD_STATUS  : Integer;

     descricao
   , fornecedor : string;

   Descricao_parcela : string;


begin
  inherited;
   if TbPrincipal.FieldByName('DATA_PAGAMENTO').IsNotNull then
   begin
      MessageDlg('Não é possível gerar parcelas de '+#13+#10+'uma conta já recebida', mtWarning, [mbOK], 0);
      Exit;
   end;

   {================================
      Salva os dados da conta para depois inserir os mesmos dados variando a data de
      vencimento, valor e codigo de barras
   =================================}

   frmLancamentoParcelas := TfrmLancamentoParcelas.Create(Application);
   frmLancamentoParcelas.edtValor.Value := TbPrincipal.FieldByName('VALOR').AsCurrency;
   frmLancamentoParcelas.edtDataInicio.Value := IncMonth(TbPrincipal.FieldByName('DATA_VENC').AsDate , 1 );

   if frmLancamentoParcelas.ShowModal <> mrok then
   begin
      frmLancamentoParcelas.Destroy;
      Exit;
   end;

   codigo             := ProximoCodigoChave('CONTAS_PAGAR' , 'COD_CONTA_PAGAR' , '');
   descricao          := TbPrincipal.FieldByName('DESCRICAO').AsString;

   cod_plano_conta    := TbPrincipal.FieldByName('COD_PLANO_CONTA').AsInteger;
   cod_tipo_documento := TbPrincipal.FieldByName('DOCUMENTO_TIPO').AsInteger;
   COD_STATUS         := TbPrincipal.FieldByName('COD_STATUS').AsInteger;
   COD_TIPO_CONTA     := TbPrincipal.FieldByName('COD_TIPO_CONTA').AsInteger;
   fornecedor         := TbPrincipal.FieldByName('COD_FORNECEDOR').AsString;

   //   cod_centro_custo   := TbPrincipal.FieldByName('COD_CENTRO_CUSTO').AsInteger;
   //   cod_grupo          := TbPrincipal.FieldByName('COD_CONTAS_FINANCEIRO_GRUPO').AsInteger;

   if not frmLancamentoParcelas.cdsParcelas.Bof then
      frmLancamentoParcelas.cdsParcelas.First;

   TbPrincipal.ReadOnly := False;
   while not frmLancamentoParcelas.cdsParcelas.Eof do
   begin
      CODIGO := codigo + 1;

      if frmLancamentoParcelas.chkIncluir_descricao_Parcela.Checked then
      begin
         Descricao_parcela := ' - Parc ' + inttostr( frmLancamentoParcelas.edtNumero_Descricao_Parcela.Value);
         frmLancamentoParcelas.edtNumero_Descricao_Parcela.Value := frmLancamentoParcelas.edtNumero_Descricao_Parcela.Value + 1;
      end
      else
         Descricao_parcela := '';

      TbPrincipal.Insert;
      TbPrincipal.FieldByName('COD_CONTA_PAGAR').Value    := codigo;
      TbPrincipal.FieldByName('DATA_CAD').Value           := Date;
      TbPrincipal.FieldByName('DESCRICAO').Value          := descricao + Descricao_parcela;
      TbPrincipal.FieldByName('DATA_VENC').Value          := frmLancamentoParcelas.cdsParcelas.FieldByName('DATA_VENC').Value;
      TbPrincipal.FieldByName('DATA_PREVISAO').Value      := frmLancamentoParcelas.cdsParcelas.FieldByName('DATA_VENC').Value;
      TbPrincipal.FieldByName('VALOR').Value              := frmLancamentoParcelas.cdsParcelas.FieldByName('VALOR').Value;
      TbPrincipal.FieldByName('DOCUMENTO_NUMERO').Value   := frmLancamentoParcelas.cdsParcelas.FieldByName('COD_BARRA').Value;

      TbPrincipal.FieldByName('COD_USUARIO_CAD').Value    := Dados.qrUsuario.FieldByName('COD_USUARIO').Value;

      TbPrincipal.FieldByName('COD_PLANO_CONTA').Value   := cod_plano_conta;
      TbPrincipal.FieldByName('COD_FORNECEDOR').Value    := fornecedor;
      TbPrincipal.FieldByName('COD_STATUS').Value        := COD_STATUS;

      if COD_TIPO_CONTA > 0 then
         TbPrincipal.FieldByName('COD_TIPO_CONTA').Value  := COD_TIPO_CONTA;

      IF cod_tipo_documento > 0 THEN
         TbPrincipal.FieldByName('DOCUMENTO_TIPO').value  := cod_tipo_documento;


//      if cod_centro_custo > 0  then
//         TbPrincipal.FieldByName('COD_CENTRO_CUSTO').value  := cod_centro_custo;


//      if cod_grupo > 0 then
//         TbPrincipal.FieldByName('COD_CONTAS_FINANCEIRO_GRUPO').value  := cod_grupo;

      TbPrincipal.Post;

      frmLancamentoParcelas.cdsParcelas.Next;
   end;

   frmLancamentoParcelas.Destroy;

   TbPrincipal.ReadOnly := True;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadContasPagar.btnEditar2Click(Sender: TObject);
begin
  inherited;
   btnPagar.Visible := False;
   btnRepetir.Visible := False;
end;

procedure TfrmCadContasPagar.btnPesquisaTipoDocumentoClick(
  Sender: TObject);
begin
  inherited;
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qryDocumentoTipo;
   frmModeloPesquisa.lblTitulo.Caption := 'Pesquisa Tipos de Documentos';
   if frmModeloPesquisa.ShowModal = mrOk then
      qryDocumentoTipo.Locate('COD_TIPO_DOCUMENTO' , frmModeloPesquisa.TbPrincipal.FieldByName('COD_TIPO_DOCUMENTO').Value , []);
   frmModeloPesquisa.Destroy;

   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadContasPagar.btnNovoTipoDocumentoClick(Sender: TObject);
begin
  inherited;
   frmCadTipoDocumento := TfrmCadTipoDocumento.Create(Application);
   frmCadTipoDocumento.OutraTela := True;
   frmCadTipoDocumento.BtInserir.Click;
   frmCadTipoDocumento.ShowModal;
   frmCadTipoDocumento.Destroy;
   qryDocumentoTipo.Close;
   qryDocumentoTipo.Open;
   Screen.OnActiveControlChange := TrocaCor;
end;

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

   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela :=  qrFornecedor;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Fornecedores';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      if qrFornecedor.Locate('COD_FORNECEDOR', frmModeloPesquisa.TbPrincipal.FieldByName('COD_FORNECEDOR').Value ,[]) then
      begin
        edtCnpj.Text:=qrFornecedor.FieldByName('CNPJ').AsString ;
        MontaMascaraCPF_CNPJ;
        TbPrincipal.FieldByName('COD_FORNECEDOR').Value := qrFornecedor.FieldByName('COD_FORNECEDOR').Value;
      end
      else
         TbPrincipal.FieldByName('COD_FORNECEDOR').Value := null;
   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadContasPagar.edtCNPJExit(Sender: TObject);
var tipoPessoa,erro : string;
begin
  inherited;
   if TbPrincipal.State in [dssBrowse] then
   begin
      MontaMascaraCPF_CNPJ;
      Exit;
   end;

   if Trim(edtCnpj.Text ) = '' then
      Exit;

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

   if edtCnpj.Text = '' then
      Exit;
   qrFornecedor.RefreshAll;
   if not qrFornecedor.Locate('CNPJ', LimpaTexto(edtCnpj.Text) , []) then
   begin
      if MessageDlg('Fornecedor não cadastrado'+#13+#10+'Deseja cadastrar agora?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
      begin
         edtCnpj.Clear;
         Exit;
      end
      else
      begin
         frmCadFornecedor := TfrmCadFornecedor.Create(Application);
         frmCadFornecedor.OutraTela := True;
         frmCadFornecedor.BtInserir.Click;
         frmCadFornecedor.edtCnpj.Field.Value   := edtCnpj.Text;
         frmCadFornecedor.ShowModal;
         edtCnpj.Text := frmCadFornecedor.edtCnpj.Field.AsString;
         frmCadFornecedor.Destroy;
         qrFornecedor.RefreshAll;

         if not qrFornecedor.Locate('CNPJ', LimpaTexto(edtCnpj.Text ) , []) then
         begin
            edtCnpj.Clear;
            if not qrFornecedor.Bof then
            begin
               qrFornecedor.First;
               qrFornecedor.Prior;
            end;
         end;
         TbPrincipal.FieldByName('COD_FORNECEDOR').Value:=qrFornecedor.fieldByName('COD_FORNECEDOR').Value ;
      end
   end;
   TbPrincipal.FieldByName('COD_FORNECEDOR').Value:=qrFornecedor.fieldByName('COD_FORNECEDOR').Value ;
   qrFornecedor.SQLWhere.Clear;
   Screen.OnActiveControlChange := TrocaCor;
   MontaMascaraCPF_CNPJ;
end;

procedure TfrmCadContasPagar.edtCNPJEnter(Sender: TObject);
begin
  inherited;
   qrFornecedor.FieldByName('CNPJ').EditMask := '';

end;

procedure TfrmCadContasPagar.edtCNPJKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtCnpj.Focused) then
      btnPesquisaFornecedor.Click;
end;

procedure TfrmCadContasPagar.edtCodPlanoContaExit(Sender: TObject);
begin
  inherited;
   if trim(edtCodPlanoConta.text) = '' then
      exit;

   if TbPrincipal.State in [dssBrowse] then
      exit;

  if NOT qrPlanoConta.Locate('COD_PLANO_CONTA' , edtCodPlanoConta.Text , []) then
  begin
     InicioDaTabela(qrPlanoConta);

     MessageDlg('Código não encontrado', mtWarning, [mbOK], 0);
     edtCodPlanoConta.SetFocus;
     edtCodPlanoConta.SelectAll;
     Exit;
  end;


end;

procedure TfrmCadContasPagar.edtPlanoContaChange(Sender: TObject);
begin
  inherited;
   if edtPlanoConta.Text = '' then
      edtCodPlanoConta.Clear
   else
     edtCodPlanoConta.Text := qrPlanoConta.FieldByName('COD_PLANO_CONTA').AsString;
end;

procedure TfrmCadContasPagar.edtTipoContaChange(Sender: TObject);
begin
  inherited;

  //======= sugere o plano de contas pre cadastrado no tipo da conta somente se nao for informado o plano de contas =====
  if ( NOT (TbPrincipal.state in [dssBrowse]) ) and (edtPlanoConta.Text = '') then
  begin
     if qrTipoConta.FieldByName('COD_PLANO_CONTA').IsNotNull then
     begin
        qrPlanoConta.locate('COD_PLANO_CONTA' , qrTipoConta.FieldByName('COD_PLANO_CONTA').value , [] );
     end;
  end;

end;

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

  TbPrincipal.FieldByName('DATA_PREVISAO').Value := ProximoDiaUtil(TbPrincipal.FieldByName('DATA_VENC').Value);
end;

procedure TfrmCadContasPagar.btnNovoFornecedorClick(Sender: TObject);
begin
  inherited;
  CadastrarFornecedor;

end;

function TfrmCadContasPagar.CadastrarFornecedor:Boolean;
begin
  frmCadFornecedor := TfrmCadFornecedor.Create(Application);
  frmCadFornecedor.OutraTela := True;
  frmCadFornecedor.BtInserir.Click;
  frmCadFornecedor.edtCnpj.Field.Value   := edtCnpj.Text;
  frmCadFornecedor.ShowModal;
  edtCnpj.Text:=frmCadFornecedor.edtCnpj.Field.Value;
  frmCadFornecedor.Destroy;

  if NOT LocalizaFornecedor(LimpaTexto(edtCnpj.Text)) then
  begin
    Result:=False;
    edtCnpj.Clear;
    edtCNpj.SetFocus;
    Exit;
  end;
  TbPrincipal.FieldByName('COD_FORNECEDOR').Value:=qrFornecedor.fieldByName('COD_FORNECEDOR').Value ;
  Result:=True;
end;

procedure TfrmCadContasPagar.cxButton1Click(Sender: TObject);
begin
  inherited;
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrPlanoConta;
   frmModeloPesquisa.lblTitulo.Caption := 'Pesquisa Plano de Contas';
   if frmModeloPesquisa.ShowModal = mrOk then
      qrPlanoConta.Locate('COD_PLANO_CONTA' , frmModeloPesquisa.TbPrincipal.FieldByName('COD_PLANO_CONTA').Value , []);
   frmModeloPesquisa.Destroy;

   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadContasPagar.cxButton2Click(Sender: TObject);
var codigo : Integer;
begin
  inherited;
  codigo := SelecionarPlanoConta('S');
  qrPlanoConta.Locate('cod_plano_conta', codigo , []);

end;

procedure TfrmCadContasPagar.MontaMascaraCPF_CNPJ;
begin
   //================= monta a mascara do cpf ou cnpj ==============
   if Length(edtCNPJ.text) = 11 then
   begin
      edtCnpj.EditLabel.Caption := 'CPF';
   end
   else
   if Length(qrFornecedor.FieldByName('CNPJ').AsString) = 14 then
   begin
      edtCnpj.EditLabel.Caption := 'CNPJ';
   end
   else
   begin
      edtCnpj.EditLabel.Caption := 'CPF/CNPJ';
   end;
   edtCNPJ.Text:=qrFornecedor.FieldByName('CNPJ').AsString;
   edtCNPJ.Text:=FormataCPF_CNPJ(edtCNPJ.Text);
end;

function TfrmCadContasPagar.LocalizaFornecedor(CNPJ:string):Boolean;
begin
   if not qrFornecedor.Locate('CNPJ',CNPJ, []) then
   begin
      if not qrFornecedor.Bof then
      begin
         qrFornecedor.First;
         qrFornecedor.Prior;
      end;
      edtCnpj.Clear;
  end;

  if qrFornecedor.RecordCount > 0 then
    Result:=True
  else Result:=False;
end;

end.
