{
===============================================================================
  Copyright (©) 2002. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 03-11-2002
  Versión actual: 1.0.0
  Fecha versión actual: 03-11-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit Clientes;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls,
  Menus, am2000menuitem, am2000popupmenu, am2000, Db, DBTables,
  RXDBCtrl, RdxPaneles, RdxBarras, TablaClientes,
  RdxDBFrame, RdxFrameClientes, RdxFrame, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, cxEdit, cxDBData, cxGridTableView,
  cxGridCustomTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls,
  cxGridCustomView, cxGrid, Configuracion, StdCtrls, Buttons, 
  AdvPanel, cxContainer, cxTextEdit,
  cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit,
  cxDBLookupComboBox, ActnList, am2000utils, cxDataStorage, cxDBEdit;

type
  TfrClientes = class(TRdxFrameClientes)
    dsClientes: TDataSource;
    brSeleccion: TRdxBarraInferior;
    bSeleccionar: TRdxBoton;
    bCancelar: TRdxBoton;
    BarraClientes: TRdxBarraSuperior;
    bAnadir: TRdxBotonSuperior;
    bModificar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bConsultar: TRdxBotonSuperior;
    MenuOpciones: TPopupMenu2000;
    mnuAnadir: TMenuItem2000;
    mnuModificar: TMenuItem2000;
    mnuEliminar: TMenuItem2000;
    gridClientesDBTableView1: TcxGridDBTableView;
    gridClientesLevel1: TcxGridLevel;
    gridClientes: TcxGrid;
    mnuConsultar: TMenuItem2000;
    bSeparador1: TShape;
    pnlCuerpo: TPanel;
    pnlSeparador: TPanel;
    Acciones: TActionList;
    actAnadir: TAction;
    actModificar: TAction;
    actEliminar: TAction;
    actConsultar: TAction;
    actSeleccionar: TAction;
    actCancelar: TAction;
    bImprimir: TRdxBotonSuperior;
    actImprimir: TAction;
    imgSombra: TImage;
    pnlExtra: TRdxBarraSuperior;
    pnlCuerpo2: TRdxPanel;
    bRefrescar: TRdxBoton;
    Shape1: TShape;
    RdxBotonSuperior1: TRdxBotonSuperior;
    actConsultarCobros: TAction;
    Panel1: TPanel;
    Buscar: TcxTextEdit;
    bLimpiar: TRdxBoton;
    eNombre: TLabel;
    procedure RdxFrameClientesShow(Sender: TObject);
    procedure cxLookupComboBox1PropertiesEditValueChanged(Sender: TObject);
    procedure actAnadirExecute(Sender: TObject);
    procedure actModificarExecute(Sender: TObject);
    procedure actEliminarExecute(Sender: TObject);
    procedure actConsultarExecute(Sender: TObject);
    procedure gridClientesDBTableView1DblClick(Sender: TObject);
    procedure actSeleccionarExecute(Sender: TObject);
    procedure actCancelarExecute(Sender: TObject);
    procedure actImprimirExecute(Sender: TObject);
    procedure actRefrescarDatosExecute(Sender: TObject);
    procedure actConsultarCobrosExecute(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure bLimpiarClick(Sender: TObject);
  private
    procedure ActualizarBotones;
  protected
    procedure BuscarCliente; override;
    procedure FreeContenido; override;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property TablaClientes;
    property Entidad;
  end;

var
  frClientes: TfrClientes;

implementation
{$R *.DFM}
uses
  IBCustomDataSet, BaseDatos, Entidades, Cliente, Variants, ListadoClientes,
  ListadoPagosCliente, TablaFacturasCliente, TablaPagosCliente, Mensajes, Literales;

constructor TfrClientes.Create (AOwner : TComponent);
begin
  inherited Create(AOwner);
  Entidad := entCliente;
 
  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaClientes := TIBDataSet.Create(Self);
  dsClientes.DataSet := TablaClientes;

  with TablaClientes do
  begin
    //DisableControls;
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaClientes.sqlGrid);
    Prepare;
    Open;
    ActualizarBotones;
    //EnableControls;
  end;

  dmTablaClientes.InicializarGridClientes(gridClientesDBTableView1);
  gridClientesDBTableView1.OnDblClick := gridClientesDBTableView1DblClick;
  gridClientesDBTableView1.Controller.GoToFirst;
end;

procedure TfrClientes.BuscarCliente;
var
i: Integer;
begin
  with TablaClientes do
  begin
    DisableControls;
    Close;
    Open;
    ActualizarBotones;

    EnableControls;
    if not Locate('CODIGO', CodigoCliente, []) then
      gridClientesDBTableView1.Controller.GoToFirst
    else
      gridClientesDBTableView1.Controller.TopRowIndex := gridClientesDBTableView1.Controller.FocusedRowIndex;
  end;
end;

destructor TfrClientes.Destroy;
begin
  TablaClientes.Close;
  TablaClientes.Unprepare;
  TablaClientes.Free;
  inherited;
end;

procedure TfrClientes.FreeContenido;
begin
  if (Contenido is TRdxFrameClientes) then
    CodigoCliente := (Contenido as TRdxFrameClientes).CodigoCliente;

  if (Contenido is TfrListadoPagosCliente) then
    CodigoCliente := (Contenido as TfrListadoPagosCliente).CodigoCliente;

  inherited FreeContenido;
  gridClientes.SetFocus;
end;

procedure TfrClientes.ActualizarBotones;
begin
  if BaseDatos.IsReadOnly then
  begin
    actAnadir.Enabled := False;
    actModificar.Enabled := False;
    actEliminar.Enabled := False;
    actConsultar.Enabled := True;
    actImprimir.Enabled := True;
    actConsultarCobros.Enabled := True;
    Exit;
  end;

  if TablaClientes.RecordCount = 0 then
  begin
    actAnadir.Enabled := True;
    actModificar.Enabled := False;
    actEliminar.Enabled := False;
    actConsultar.Enabled := False;
    actImprimir.Enabled := False;
    actConsultarCobros.Enabled := False;
  end
  else begin
    actAnadir.Enabled := True;
    actModificar.Enabled := True;
    actEliminar.Enabled := True;
    actConsultar.Enabled := True;
    actImprimir.Enabled := True;
    actConsultarCobros.Enabled := True;
  end;
end;

procedure TfrClientes.RdxFrameClientesShow(Sender: TObject);
begin
  gridClientes.SetFocus;
end;

procedure TfrClientes.cxLookupComboBox1PropertiesEditValueChanged(
  Sender: TObject);
begin
  TablaClientes.Locate('CODIGO', (Sender as TcxLookupComboBox).EditValue, [loCaseInsensitive]);
end;

procedure TfrClientes.actAnadirExecute(Sender: TObject);
begin
  Contenido := TfrCliente.Create(Self);
  Contenido.Modo := Anadir;
end;

procedure TfrClientes.actModificarExecute(Sender: TObject);
begin
  Contenido := TfrCliente.Create(Self);
  Contenido.Modo := Modificar;
end;

procedure TfrClientes.actEliminarExecute(Sender: TObject);
begin
  Contenido := TfrCliente.Create(Self);
  Contenido.Modo := Eliminar;
end;

procedure TfrClientes.actConsultarExecute(Sender: TObject);
begin
  Contenido := TfrCliente.Create(Self);
  Contenido.Modo := Consultar;
end;

procedure TfrClientes.gridClientesDBTableView1DblClick(Sender: TObject);
begin
  if Modo = Seleccionar then
    actSeleccionar.Execute
  else
    actModificar.Execute;
end;

procedure TfrClientes.actSeleccionarExecute(Sender: TObject);
begin
  CodigoCliente := TablaClientes.FieldByName('CODIGO').AsString;
  CloseFrame;
end;

procedure TfrClientes.actCancelarExecute(Sender: TObject);
begin
  FCodigoCliente := NULL;
  CloseFrame;
end;

procedure TfrClientes.actImprimirExecute(Sender: TObject);
begin
  Contenido := TfrListadoClientes.Create(Self);
  Contenido.Modo := Imprimir;
end;

procedure TfrClientes.actRefrescarDatosExecute(Sender: TObject);
begin
  FCodigoCliente := TablaClientes.FieldByName('CODIGO').AsString;
  BuscarCliente;
end;

procedure TfrClientes.actConsultarCobrosExecute(Sender: TObject);
var
  lCodigo : Variant;

begin
  lCodigo := TablaClientes.FieldByName('CODIGO').AsVariant;
  if dmTablaFacturasCliente.ExisteFacturaConCliente(lCodigo)
  or dmTablaPagosCliente.ExistePagoConCliente(lCodigo) then
  begin
    Contenido := TfrListadoPagosCliente.Create(Self);
    Contenido.Modo := Consultar;
    (Contenido as TfrListadoPagosCliente).activarFacturasCobrosCliente;
  end
  else
    VerMensajeFmt(msgCliCliNoFacPag, [lCodigo]);
end;

procedure TfrClientes.SetContenido(NuevoFrame: TRdxFrame);
begin
  inherited;
  if (Contenido is TfrListadoPagosCliente) then
    (Contenido as TfrListadoPagosCliente).CodigoCliente := CodigoCliente;
end;

procedure TfrClientes.Edit1Change(Sender: TObject);
begin
  FiltrarGrid(gridClientes, Buscar.Text);
end;

procedure TfrClientes.bLimpiarClick(Sender: TObject);
begin
  Buscar.Text := '';
end;

end.
