{
===============================================================================
  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 PagosProveedores;

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
  TfrPagosProveedores = class(TRdxFramePagos)
    dsPagosProveedores: TDataSource;
    brSeleccion: TRdxBarraInferior;
    bSeleccionar: TRdxBoton;
    bCancelar: TRdxBoton;
    BarraPagosProveedores: TRdxBarraSuperior;
    MenuOpciones: TPopupMenu2000;
    mnuOpPagoA: TMenuItem2000;
    mnuEliminar: TMenuItem2000;
    gridPagosProveedoresDBTableView1: TcxGridDBTableView;
    gridPagosProveedoresLevel1: TcxGridLevel;
    gridPagosProveedores: TcxGrid;
    mnuConsultar: TMenuItem2000;
    pnlCuerpo: TPanel;
    Acciones: TActionList;
    actAnadirPago: TAction;
    actEliminar: TAction;
    actConsultar: TAction;
    actSeleccionar: TAction;
    actCancelar: TAction;
    pnlCuerpo2: TRdxPanel;
    pnlExtra: TRdxBarraSuperior;
    bAnadir: TRdxBotonMenu;
    bSeparador1: TShape;
    mnuOpPagoB: TMenuItem2000;
    menuAnadir: TPopupMenu2000;
    mnuPagoA: TMenuItem2000;
    bModificar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bConsultar: TRdxBotonSuperior;
    actAnadirAbono: TAction;
    actModificar: TAction;
    mnuAbonoA: TMenuItem2000;
    mnuAnadir: TMenuItem2000;
    mnuOpAbonoA: TMenuItem2000;
    OpSep: TMenuItem2000;
    mnuOpAbonoB: TMenuItem2000;
    mnuModificar: TMenuItem2000;
    imgSombra: TImage;
    bRefrescar: TRdxBoton;
    Panel1: TPanel;
    eNombre: TLabel;
    Buscar: TcxTextEdit;
    bLimpiar: TRdxBoton;
    procedure actAnadirPagoExecute(Sender: TObject);
    procedure actAnadirAbonoExecute(Sender: TObject);
    procedure actAnadirPagoBExecute(Sender: TObject);
    procedure actAnadirAbonoBExecute(Sender: TObject);
    procedure actModificarExecute(Sender: TObject);
    procedure actEliminarExecute(Sender: TObject);
    procedure actConsultarExecute(Sender: TObject);
    procedure actSeleccionarExecute(Sender: TObject);
    procedure actCancelarExecute(Sender: TObject);
    procedure bLimpiarClick(Sender: TObject);
    procedure RdxFramePagosProveedoresShow(Sender: TObject);
    procedure gridPagosProveedoresDBTableView1DblClick(Sender: TObject);
    procedure cxLookupComboBox1PropertiesEditValueChanged(Sender: TObject);
    procedure gridPagosProveedoresDBTableView1CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    procedure actRefrescarDatosExecute(Sender: TObject);
    procedure BuscarPropertiesChange(Sender: TObject);

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

var
  frPagosProveedores: TfrPagosProveedores;

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

////////////////////////////////////////////////////////////////////////////////
// PRIVATE
////////////////////////////////////////////////////////////////////////////////
procedure TfrPagosProveedores.ActualizarBotones;
begin
  if BaseDatos.IsReadOnly then
  begin
    actAnadirPago.Enabled := False;
    actAnadirAbono.Enabled := False;
    actModificar.Enabled := False;
    actEliminar.Enabled := False;
    actConsultar.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;
  end
  else begin
    actAnadirPago.Enabled := True;
    actAnadirAbono.Enabled := True;
    actModificar.Enabled := True;
    actEliminar.Enabled := True;
    actConsultar.Enabled := True;
  end;
end;

////////////////////////////////////////////////////////////////////////////////
// PROTECTED
////////////////////////////////////////////////////////////////////////////////
procedure TfrPagosProveedores.BuscarPago;
begin
  with TablaPagos do
  begin
    DisableControls;
    Close;
    Open;
    dmTablaPagosProveedor.InicializarTablaPagosProveedores(@TablaPagos);
    ActualizarBotones;

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

procedure TfrPagosProveedores.FreeContenido;
begin
  if (Contenido is TRdxFramePagos) then
  begin
    CodigoPago := (Contenido as TRdxFramePagos).CodigoPago;
  end;
  inherited FreeContenido;
  gridPagosProveedores.SetFocus;
end;

////////////////////////////////////////////////////////////////////////////////
// PUBLIC
////////////////////////////////////////////////////////////////////////////////
constructor TfrPagosProveedores.Create (AOwner : TComponent);
begin
  inherited Create(AOwner);
  Entidad := entPagoProveedor;
  
  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaPagos := TIBDataSet.Create(Self);
  dsPagosProveedores.DataSet := TablaPagos;

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

  dmTablaPagosProveedor.InicializarGridPagosProveedores(gridPagosProveedoresDBTableView1);
  dmTablaPagosProveedor.InicializarTablaPagosProveedores(@TablaPagos);
  gridPagosProveedoresDBTableView1.OnDblClick := gridPagosProveedoresDBTableView1DblClick;
end;

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

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

  Contenido := TfrPagoProveedor.Create(Self);
  Contenido.Entidad := entPagoProveedor;
  Contenido.Modo := Anadir;
end;

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

  Contenido := TfrPagoProveedor.Create(Self);
  Contenido.Entidad := entAbonoProveedor;
  Contenido.Modo := Anadir;
end;

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

  Contenido := TfrPagoProveedor.Create(Self);
  Contenido.Entidad := entPagoProveedor;
  Contenido.Modo := Anadir;
end;

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

  Contenido := TfrPagoProveedor.Create(Self);
  Contenido.Entidad := entAbonoProveedor;
  Contenido.Modo := Anadir;
end;

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

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

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

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

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

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

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

procedure TfrPagosProveedores.RdxFramePagosProveedoresShow(Sender: TObject);
begin
  gridPagosProveedores.SetFocus;
end;

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

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

procedure TfrPagosProveedores.gridPagosProveedoresDBTableView1CustomDrawCell(
  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 TfrPagosProveedores.actRefrescarDatosExecute(Sender: TObject);
begin
  FCodigoPago := TablaPagos.FieldByName('CODIGO').AsString;
  BuscarPago;
end;

procedure TfrPagosProveedores.BuscarPropertiesChange(Sender: TObject);
begin
  FiltrarGrid(gridPagosProveedores, Buscar.Text);
end;

end.
