{
===============================================================================
  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.1
  Fecha versión actual: 16-04-2003
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    16-04-2003    Los abonos se han puesto de color rojo oscuro.
===============================================================================
}

unit PagosClientes;

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, RdxFramePagos, 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,

  RdxEmpresaActiva, am2000utils, cxDataStorage;

type
  TfrPagosClientes = class(TRdxFramePagos)
    dsPagosClientes: TDataSource;
    brSeleccion: TRdxBarraInferior;
    bSeleccionar: TRdxBoton;
    bCancelar: TRdxBoton;
    BarraPagosClientes: TRdxBarraSuperior;
    MenuOpciones: TPopupMenu2000;
    mnuOpPagoA: TMenuItem2000;
    mnuEliminar: TMenuItem2000;
    gridPagosClientesDBTableView1: TcxGridDBTableView;
    gridPagosClientesLevel1: TcxGridLevel;
    gridPagosClientes: TcxGrid;
    mnuConsultar: TMenuItem2000;
    pnlCuerpo: TPanel;
    pnlSeparador: TPanel;
    Acciones: TActionList;
    actAnadirPago: TAction;
    actEliminar: TAction;
    actConsultar: TAction;
    actSeleccionar: TAction;
    actCancelar: TAction;
    pnlCuerpo2: TRdxPanel;
    pnlExtra: TRdxBarraSuperior;
    bAnadir: TRdxBotonMenu;
    menuAnadir: TPopupMenu2000;
    mnuPagoA: TMenuItem2000;
    mnuOpPagoB: TMenuItem2000;
    actImprimir: TAction;
    mnuImprimir: TMenuItem2000;
    bModificar: TRdxBotonSuperior;
    bConsultar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bSeparador1: TShape;
    bImprimir: TRdxBotonSuperior;
    actModificar: TAction;
    mnuAbonoA: TMenuItem2000;
    mnuAnadir: TMenuItem2000;
    mnuOpAbonoA: TMenuItem2000;
    mnuOpAbonoB: TMenuItem2000;
    mnuOpSep: TMenuItem2000;
    mnuOpSep2: TMenuItem2000;
    actAnadirAbono: TAction;
    mnuModificar: TMenuItem2000;
    imgSombra: TImage;
    bRefrescar: TRdxBoton;
    Shape1: TShape;
    RdxBotonSuperior1: TRdxBotonSuperior;
    actConsultarCobros: TAction;
    Panel1: TPanel;
    Label1: TLabel;
    Buscar: TcxTextEdit;
    RdxBoton1: TRdxBoton;
    procedure actAnadirPagoExecute(Sender: TObject);
    procedure actAnadirAbonoExecute(Sender: TObject);
    procedure actAnadirPagoBExecute(Sender: TObject);
    procedure actAnadirAbonoBExecute(Sender: TObject);
    procedure actModificarExecute(Sender: TObject);
    procedure actConsultarExecute(Sender: TObject);
    procedure actEliminarExecute(Sender: TObject);
    procedure actImprimirExecute(Sender: TObject);
    procedure actSeleccionarExecute(Sender: TObject);
    procedure actCancelarExecute(Sender: TObject);
    procedure bLimpiarClick(Sender: TObject);
    procedure RdxFramePagosClientesShow(Sender: TObject);
    procedure gridPagosClientesDBTableView1DblClick(Sender: TObject);
    procedure cxLookupComboBox1PropertiesEditValueChanged(Sender: TObject);
    procedure gridPagosClientesDBTableView1CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    procedure actRefrescarDatosExecute(Sender: TObject);
    procedure actConsultarCobrosExecute(Sender: TObject);
    procedure BuscarPropertiesChange(Sender: TObject);    

  private
    procedure ActualizarBotones;
  protected
    procedure BuscarPago; override;
    procedure FreeContenido; override;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;    
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
  end;

var
  frPagosClientes: TfrPagosClientes;

implementation
{$R *.DFM}
uses
  Constantes, IBCustomDataSet, BaseDatos, Entidades, PagoCliente, Variants,
  TablaPagosCliente, Mensajes, Literales, ImprimirPagoCliente,
  TablaEmpresas, ListadoPagosCliente;

////////////////////////////////////////////////////////////////////////////////
// PRIVATE
////////////////////////////////////////////////////////////////////////////////
procedure TfrPagosClientes.ActualizarBotones;
begin
  if BaseDatos.IsReadOnly then
  begin
    actAnadirPago.Enabled := False;
    actAnadirAbono.Enabled := False;
    actModificar.Enabled := False;
    actEliminar.Enabled := False;
    actConsultar.Enabled := True;
    actImprimir.Enabled := True;
    actConsultarCobros.Enabled := True;
    Exit;
  end;

  if TablaPagos.RecordCount = 0 then
  begin
    actAnadirPago.Enabled := True;
    actAnadirAbono.Enabled := True;
    actModificar.Enabled := False;
    actEliminar.Enabled := False;
    actConsultar.Enabled := False;
    actImprimir.Enabled := False;
    actConsultarCobros.Enabled := False;
  end
  else begin
    actAnadirPago.Enabled := True;
    actAnadirAbono.Enabled := True;
    actModificar.Enabled := True;
    actEliminar.Enabled := True;
    actConsultar.Enabled := True;
    actImprimir.Enabled := True;
    actConsultarCobros.Enabled := True;
  end;
end;

////////////////////////////////////////////////////////////////////////////////
// PROTECTED
////////////////////////////////////////////////////////////////////////////////
procedure TfrPagosClientes.BuscarPago;
begin
  with TablaPagos do
  begin
    DisableControls;
    Close;
    Open;
    dmTablaPagosCliente.InicializarTablaPagosClientes(@TablaPagos);
    ActualizarBotones;

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

procedure TfrPagosClientes.FreeContenido;
begin
  if (Contenido is TRdxFramePagos) then begin
    CodigoPago := (Contenido as TRdxFramePagos).CodigoPago;
  end;
  inherited FreeContenido;
  //gridPagosClientes.SetFocus;
end;

////////////////////////////////////////////////////////////////////////////////
// PUBLIC
////////////////////////////////////////////////////////////////////////////////
constructor TfrPagosClientes.Create (AOwner : TComponent);
begin
  inherited Create(AOwner);
  Entidad := entCobroCliente;
  
  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaPagos := TIBDataSet.Create(Self);
  dsPagosClientes.DataSet := TablaPagos;

  with TablaPagos do
  begin
    DisableControls;
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaPagosCliente.sqlGrid);
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
    Open;
    ActualizarBotones;
    EnableControls;
  end;

  dmTablaPagosCliente.InicializarGridPagosClientes(gridPagosClientesDBTableView1);
  dmTablaPagosCliente.InicializarTablaPagosClientes(@TablaPagos);
  gridPagosClientesDBTableView1.OnDblClick := gridPagosClientesDBTableView1DblClick;
  gridPagosClientesDBTableView1.Controller.GoToFirst;
end;

destructor TfrPagosClientes.Destroy;
begin
  TablaPagos.Close;
  TablaPagos.Unprepare;
  TablaPagos.Free;
  inherited;
end;

procedure TfrPagosClientes.actAnadirPagoExecute(Sender: TObject);
begin
  if (Contenido <> Nil) and (Contenido.Modo = Anadir) then
    exit;

  Contenido := TfrPagoCliente.Create(Self);
  Contenido.Entidad := entCobroCliente;
  Contenido.Modo := Anadir;
end;

procedure TfrPagosClientes.actAnadirAbonoExecute(Sender: TObject);
begin
  if (Contenido <> Nil) and (Contenido.Modo = Anadir) then
    exit;

  Contenido := TfrPagoCliente.Create(Self);
  Contenido.Entidad := entAbonoCliente;  
  Contenido.Modo := Anadir;
end;

procedure TfrPagosClientes.actAnadirPagoBExecute(Sender: TObject);
begin
  if (Contenido <> Nil) and (Contenido.Modo = Anadir) then
    exit;

  Contenido := TfrPagoCliente.Create(Self);
  Contenido.Entidad := entCobroCliente;  
  Contenido.Modo := Anadir;
end;

procedure TfrPagosClientes.actAnadirAbonoBExecute(Sender: TObject);
begin
  if (Contenido <> Nil) and (Contenido.Modo = Anadir) then
    exit;

  Contenido := TfrPagoCliente.Create(Self);
  Contenido.Entidad := entAbonoCliente;  
  Contenido.Modo := Anadir;
end;

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

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

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

procedure TfrPagosClientes.actImprimirExecute(Sender: TObject);
begin
  Contenido := TfrImprimirPagoCliente.Create(Self);
  Contenido.Modo := Imprimir;
  (Contenido as TfrImprimirPagoCliente).codigoPago := TablaPagos.fieldbyname('CODIGO').AsString;
end;

procedure TfrPagosClientes.actSeleccionarExecute(Sender: TObject);
begin
  if TablaPagos.RecordCount = 0 then
  begin
    VerMensaje(msgCliNoExistePag);
    exit;
  end;

  CodigoPago := TablaPagos.FieldByName('CODIGO').AsString;
  CloseFrame;
end;

procedure TfrPagosClientes.actCancelarExecute(Sender: TObject);
begin
  CodigoPago := NULL;
  CloseFrame;
end;

procedure TfrPagosClientes.RdxFramePagosClientesShow(Sender: TObject);
begin
  Buscar.SetFocus
end;

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

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

procedure TfrPagosClientes.gridPagosClientesDBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  IndiceCol : Integer;
begin
  if not AViewInfo.Selected then
  begin
    IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('TIPOPAGO').Index;
    if AViewInfo.GridRecord.DisplayTexts[IndiceCol] = CTE_ABONO then
      ACanvas.Canvas.Font.Color := $000000CC;
  end;
end;

procedure TfrPagosClientes.actRefrescarDatosExecute(Sender: TObject);
begin
  FCodigoPago := TablaPagos.FieldByName('CODIGO').AsString;
  BuscarPago;
end;

procedure TfrPagosClientes.actConsultarCobrosExecute(Sender: TObject);
begin
  Contenido := TfrListadoPagosCliente.Create(Self);
  Contenido.Modo := Consultar;
 (Contenido as TfrListadoPagosCliente).activarFacturasCobrosCliente;  
end;

procedure TfrPagosClientes.SetContenido(NuevoFrame: TRdxFrame);
begin
  inherited;
  if (Contenido is TfrListadoPagosCliente) then
    (Contenido as TfrListadoPagosCliente).CodigoCliente := TablaPagos.FieldByName('CODIGOCLIENTE').AsVariant;
end;

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

procedure TfrPagosClientes.BuscarPropertiesChange(Sender: TObject);
begin
  FiltrarGrid(gridPagosClientes, Buscar.Text);
end;

end.
