{
===============================================================================
  Copyright (©) 2001. 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: 01-10-2001
  Versión actual: 1.0.2
  Fecha versión actual: 07-04-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    24-02-2002    Ajusta el alto de la ventana modal de listar.

    07-04-2002    Se ha adaptado a una unica transacción.

    14-07-2004    Se ha adaptado a multiempresa.
===============================================================================
}

unit HistoricoMovimientos;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids, RdxBotones, StdCtrls, IB, RdxFrame, 
  RdxMemo, RdxCampos, ExtCtrls, Tipos, IBCustomDataSet,
  RdxComboBox, Db, DBTables, RXDBCtrl, RdxTitulos, RdxPaneles, IBSQL,
  RdxBarras, DBCtrls, RxMemDS, RdxCheckBox, RdxFrameHistoricoMovimientos,
  Mensajes, pngimage, cxStyles,
  cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit,
  cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
  cxContainer, cxTextEdit;

type
  TfrHistoricoMovimientos = class(TRdxFrameHistoricoMovimientos)
    dsMovimientos: TDataSource;
    RdxBarraSuperior1: TRdxBarraSuperior;
    bConsultar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bListar: TRdxBotonSuperior;
    pnlCuerpo: TRdxPanel;
    pnlGridArticulos: TPanel;
    pnlDatos: TPanel;
    pnlExtra: TRdxBarraSuperior;
    gridMovimientos: TcxGrid;
    imgSombra: TImage;
    gridMovimientosView: TcxGridDBTableView;
    gridMovimientosLevel: TcxGridLevel;
    Panel1: TPanel;
    eNombre: TLabel;
    Panel2: TPanel;
    eAlmacen: TLabel;
    cbxAlmacen: TRdxComboBox;
    Buscar: TcxTextEdit;
    bLimpiar: TRdxBoton;
    bRefrescar: TRdxBoton;

    procedure bConsultarClick(Sender: TObject);
    procedure bEliminarClick(Sender: TObject);
    procedure bListarClick(Sender: TObject);
    procedure cbxAlmacenChange(Sender: TObject);
    procedure gridMovimientosRefreshButton(Sender: TObject);
    procedure BuscarPropertiesChange(Sender: TObject);
    procedure bLimpiarClick(Sender: TObject);
    procedure bRefrescarClick(Sender: TObject);
  private
    procedure ActualizarBotones;
  protected
    procedure BuscarAlmacen; override;
    procedure BuscarMovimiento; override;
    procedure FreeContenido; override;
    procedure VerModal; override;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property TablaMovimientos;
    property Entidad;
  end;

var
  frHistoricoMovimientos: TfrHistoricoMovimientos;

implementation

{$R *.DFM}
uses
  BaseDatos,
  TablaMovimientos, TablaAlmacenes, TablaHistoricoMovimientos, Excepciones,
  Configuracion, RdxEmpresaActiva, Entidades, Variants, HistoricoMovimiento;
//  TablaArticulos;

constructor TfrHistoricoMovimientos.Create (AOwner : TComponent);
var
  i : integer;
begin
  inherited Create(AOwner);
  Entidad := entAlmacen;
  ConfigurarFrame(Self, Self.Entidad);

  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaMovimientos := TIBDataSet.Create(Self);
  dsMovimientos.DataSet := TablaMovimientos;

  with TablaMovimientos do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaHistoricoMovimientos.sqlGrid);
  end;

  dmTablaAlmacenes.darAlmacenes(EmpresaActiva.Codigo, FListaAlmacenesCodigo,FListaCodigosAlmacen);

  for i:=0 to FListaAlmacenesCodigo.Count-1 do
    cbxAlmacen.Items.Add(FListaAlmacenesCodigo.Names[i]);

  // Carga el primer almacen
  cbxAlmacen.ItemIndex := 0;
  CodigoAlmacen := FListaAlmacenesCodigo.Values[cbxAlmacen.Text];


//  dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
  dmTablaHistoricoMovimientos.InicializarGridMovimientos(gridMovimientos);
//  gridMovimientos.AutoWidth := awWidestValueTitle;
end;

destructor TfrHistoricoMovimientos.Destroy;
begin
  TablaMovimientos.Close;
  TablaMovimientos.UnPrepare;
  TablaMovimientos.Free;
  inherited;
end;

procedure TfrHistoricoMovimientos.BuscarAlmacen;
begin
  if Transaccion = NIL then
    exit;

  try
    TablaMovimientos.DisableControls;
    TablaMovimientos.Close;

    if not VarIsNull(CodigoAlmacen) then
      TablaMovimientos.Params.ByName('CODIGOALMACEN').AsString := CodigoAlmacen;
      
    TablaMovimientos.Params.ByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;


    TablaMovimientos.Prepare;
    TablaMovimientos.Open;
    ActualizarBotones;
    TablaMovimientos.EnableControls;

    // Establece en el combox el almacen correspondiente al codigo a buscar
    cbxAlmacen.ItemIndex := cbxAlmacen.Items.IndexOf(FListaCodigosAlmacen.Values[CodigoAlmacen]);
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrHistoricoMovimientos.cbxAlmacenChange(Sender: TObject);
begin
  CodigoAlmacen := FListaAlmacenesCodigo.Values[cbxAlmacen.Text];
end;

procedure TfrHistoricoMovimientos.FreeContenido;
begin
  if (Contenido is TRdxFrameHistoricoMovimientos) then
    CodigoMovimiento := (Contenido as TRdxFrameHistoricoMovimientos).CodigoMovimiento;
  inherited;
end;

procedure TfrHistoricoMovimientos.bEliminarClick(Sender: TObject);
begin
  CodigoMovimiento := TablaMovimientos.FieldByName('CODIGO').AsString;
  Contenido := TfrHistoricoMovimiento.Create(Self);
  Contenido.Modo := Eliminar;
end;

procedure TfrHistoricoMovimientos.bConsultarClick(Sender: TObject);
begin
  CodigoMovimiento := TablaMovimientos.FieldByName('CODIGO').AsString;
  Contenido := TfrHistoricoMovimiento.Create(Self);
  Contenido.Modo := Consultar;
end;

procedure TfrHistoricoMovimientos.bListarClick(Sender: TObject);
begin
//  Contenido := TfrListadoHistoricoMovimientos.Create(Self);  
end;

procedure TfrHistoricoMovimientos.BuscarMovimiento;
begin
  with TablaMovimientos do
  begin
    DisableControls;
    Close;
    Open;
    ActualizarBotones;
    EnableControls;
  end;
  TablaMovimientos.Locate('CODIGO',CodigoMovimiento,[]);
end;

procedure TfrHistoricoMovimientos.VerModal;
begin
{ INFORME DESACTIVADO
  if (ContenidoModal is TfrListadoHistoricoMovimientos) then
    (ContenidoModal as TfrListadoHistoricoMovimientos).CodigoAlmacen := CodigoAlmacen;}
  inherited;
end;

procedure TfrHistoricoMovimientos.ActualizarBotones;
begin
  if BaseDatos.IsReadOnly then
  begin
    bConsultar.Enabled := True;
    bEliminar.Enabled := False;
    bListar.Enabled := True;
    Exit;
  end;

  if TablaMovimientos.RecordCount= 0 then
  begin
    bConsultar.Enabled := False;
    bEliminar.Enabled := False;
    bListar.Enabled := False;
  end
  else begin
    bConsultar.Enabled := True;
    bEliminar.Enabled := True;
    bListar.Enabled := True;
  end;
end;

procedure TfrHistoricoMovimientos.gridMovimientosRefreshButton(
  Sender: TObject);
begin
  //Porque no se va ha cambiar de almacen ya que es solo refresco
  BuscarMovimiento;
end;

procedure TfrHistoricoMovimientos.SetContenido(NuevoFrame: TRdxFrame);
begin
  inherited;
{ INFORME DESACTIVADO
  if (Contenido is TfrListadoHistoricoMovimientos) then
  begin
    (Contenido as TfrListadoHistoricoMovimientos).Entidad := Entidad;
    (Contenido as TfrListadoHistoricoMovimientos).CodigoAlmacen := CodigoAlmacen;
  end;}
end;

procedure TfrHistoricoMovimientos.BuscarPropertiesChange(Sender: TObject);
begin
  FiltrarGrid(gridMovimientos, Buscar.Text);
end;

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

procedure TfrHistoricoMovimientos.bRefrescarClick(Sender: TObject);
begin
  BuscarMovimiento;
end;

end.
