unit UReceber;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DB, Grids, DBGrids, StdCtrls, ComCtrls, Buttons,
  ActnList;

type
  TFReceber = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    DBGrid1: TDBGrid;
    DSReceber: TDataSource;
    GroupBox1: TGroupBox;
    Data2: TDateTimePicker;
    Data1: TDateTimePicker;
    ComboCliente: TComboBox;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    Label30: TLabel;
    LBTotal: TLabel;
    SpeedButton4: TSpeedButton;
    ActionList1: TActionList;
    Totalizar: TAction;
    Label2: TLabel;
    LbData: TLabel;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    Label1: TLabel;
    Label3: TLabel;
    procedure ComboClienteDropDown(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure TotalizarExecute(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
  private
     Total:Currency;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FReceber: TFReceber;


implementation
uses
 UdataModulo,UImpFatura;

{$R *.dfm}

procedure TFReceber.ComboClienteDropDown(Sender: TObject);
begin
  ComboCliente.items.Clear;
  if Modulo.TBCliente['NomeFantasia']<>null then
  begin
    with modulo.Query1 do
    begin
      Close;
      Sql.Clear;
      Sql.Add('Select NomeFantasia from TbCliente order by NomeFantasia');
      Open;
    end;

    Modulo.Query1.First;
    while not Modulo.Query1.eof do
    begin
      ComboCliente.Items.Add(Modulo.Query1['NomeFantasia']);
      Modulo.Query1.Next;
    end;
  end
  else
    ShowMessage('Você precisa ter no mínimo um cliente cadastrado');
    
end;

procedure TFReceber.FormCreate(Sender: TObject);
begin
  Modulo.TbReceber.Open;
  Modulo.TBCliente.Open;
  Data1.Date:=Date;
  Data2.Date:=Date;
end;

procedure TFReceber.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Modulo.TbReceber.Close;
end;

procedure TFReceber.SpeedButton4Click(Sender: TObject);
begin
  Modulo.TBReceber.Filtered:=False;
  Modulo.TBReceber.Filter:='Situacao<>'''+'OK'+'''';
  Modulo.TBReceber.Filtered:=True;

end;

procedure TFReceber.SpeedButton1Click(Sender: TObject);
begin
  if ComboCliente.Text<>'selecione o cliente' then
  begin
    Modulo.TBReceber.Filtered:=False;
    Modulo.TBReceber.Filter:='Fantasia='''+ComboCliente.Text+
                             '''and Data>='''+DateToStr(Data1.Date)+
                             '''and Data<='''+DateToStr(Data2.Date)+
                             '''and Situacao='''+''+'''';
    Modulo.TBReceber.Filtered:=True;
    TotalizarExecute(Self);
  end
  else
    ShowMessage('Selecione o Clinte, antes de efetuar a operação');
end;

procedure TFReceber.SpeedButton2Click(Sender: TObject);
begin
  if ComboCliente.Text<>'selecione o cliente' then
  begin
    Modulo.TBReceber.Filtered:=False;
    Modulo.TBReceber.Filter:='Fantasia='''+ComboCliente.Text+
                             '''and Data>='''+DateToStr(Data1.Date)+
                             '''and Data<='''+DateToStr(Data2.Date)+
                             '''and Situacao<>'''+'OK'+'''';
    Modulo.TBReceber.Filtered:=True;
    TotalizarExecute(Self);

    if Total=0 then
    begin
      Application.MessageBox('Este cliente não tem nenhum débito.'+#13+
                             'Não é possivel gerar recebimento.',
                             'Sem Débito',0+64);
      Modulo.TbReceber.Filtered:=False;
      Abort;
    end;

    if Application.MessageBox('Deseja mesmo gerar recebimento?',
                              'Atenção',0+4+32)=6 then
    begin

            //Gera recebimento
      Modulo.TbRecebimentos.Open;
      with Modulo.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select max(Codigo) as Codigo from TbRecebimentos');
        Open;
      end;

      Modulo.TbRecebimentos.Insert;
      if Modulo.Query1['Codigo']<>null then
        Modulo.TbRecebimentos['Codigo']:=Modulo.Query1['Codigo']+1
      else
        Modulo.TbRecebimentos['Codigo']:='1';

      Modulo.TbRecebimentos['Data']:=DateToStr(Now);
      Modulo.TbRecebimentos['Natureza']:='Convênio';
      Modulo.TbRecebimentos['Cliente']:=ComboCliente.Text;
      Modulo.TbRecebimentos['Valor']:=LbTotal.Caption;
      Modulo.TbRecebimentos.Post;
      Modulo.TbRecebimentos.Close;
      Modulo.TBCliente.Open;

      try
        Modulo.TBCliente.Locate('NomeFantasia',ComboCliente.Text,[]);
        Application.Createform(TFImpReceber, FImpReceber);
        FImpReceber.LbTotal.Caption:=FImpReceber.LbTotal.Caption+LbTotal.Caption;
        FImpReceber.LbData1.Caption:=DateToStr(Data1.Date);
        FImpReceber.LbData2.Caption:=DateToStr(Data1.Date);
        FImpReceber.LbTitulo.Caption:='Recibo de Pagamento';
        FImpReceber.QuickRep1.PreviewModal;
      finally
        FImpReceber.Free;
        Modulo.TBReceber.Filtered:=False;
        Modulo.TBReceber.Filter:='Fantasia='''+ComboCliente.Text+
                             '''and Data>='''+DateToStr(Data1.Date)+
                             '''and Data<='''+DateToStr(Data2.Date)+
                             '''and Situacao<>'''+'OK'+'''';
        Modulo.TBReceber.Filtered:=True;
        Modulo.TbReceber.DisableControls;
        Modulo.TbReceber.First;
        while not  Modulo.TbReceber.eof do
        begin
          Modulo.TbReceber.Edit;
          Modulo.TbReceber['Situacao']:='OK';
         // Modulo.TbReceber.Edit;
         // Modulo.TbReceber.Post;
          Modulo.TbReceber.Next;
        end;
        Modulo.TbReceber.EnableControls;
      end;
    end
    else
      Abort;
  end
  else
  ShowMessage('Selecione o Cliente, antes de efetuar a operação');
  Modulo.TbReceber.Filtered:=False;
end;

procedure TFReceber.TotalizarExecute(Sender: TObject);
begin
  Total:=0;
  Modulo.TbReceber.DisableControls;
  Modulo.TbReceber.First;
  while not  Modulo.TbReceber.eof do
  begin
    Total:=Total+Modulo.TbReceber['Total'];
    Modulo.TbReceber.Next;
  end;
  LbTotal.Caption:='R$'+Format('%8f',[Total]);
  Modulo.TbReceber.EnableControls;
  LbData.Caption:='De:'+DateToStr(Data1.Date)+' A:'+DateToStr(Data2.Date);
end;
procedure TFReceber.SpeedButton5Click(Sender: TObject);
begin
  Modulo.TbReceber.Filtered:=False;
end;

procedure TFReceber.SpeedButton6Click(Sender: TObject);
begin
  Modulo.TbReceber.Filtered:=False;
  Modulo.TbReceber.Filter:='Situacao='''+'OK'+'''';
  Modulo.TbReceber.Filtered:=True;
  TotalizarExecute(self);

end;

procedure TFReceber.SpeedButton3Click(Sender: TObject);
begin
  if Application.MessageBox('Deseja mesmo imprimir a fatura do Cliente selecionado?',
                                  'Imprimir?',0+4+32)= 6 then
  begin
    Modulo.TBCliente.Open;
    Modulo.TBCliente.Locate('NomeFantasia',ComboCliente.Text,[]);
    Application.Createform(TFImpReceber, FImpReceber);
    FImpReceber.LbTotal.Caption:=FImpReceber.LbTotal.Caption+LbTotal.Caption;
    FImpReceber.LbData1.Caption:=DateToStr(Data1.Date);
    FImpReceber.LbData2.Caption:=DateToStr(Data1.Date);
    FImpReceber.QuickRep1.Print;
  end
  else
    Abort;
end;

end.
