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

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    04-10-2004    Se añade unidad cambiarEntidad para que pueda cambiar de color
                  dependiendo del modulo desde el que se la llama

===============================================================================
}

unit ListadoHistoricoMovimientos;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ListadoBase, cxDropDownEdit, cxCalendar, RdxRadioButton, RdxShape,
  StdCtrls, RdxCampos, cxControls, cxContainer, cxEdit, cxTextEdit,
  cxMaskEdit, cxButtonEdit, ExtCtrls, RdxTitulos, RdxPaneles, cxDBEdit,
  Tipos;

type
  TfrListadoHistoricoMovimientos = class(TfrListadoBase)
    eAlmacen: TLabel;
    CodAlmacen: TcxButtonEdit;
    NombreAlmacen: TRdxEdit;
    eInfoCriterios: TLabel;
    Separador: TRdxShape;
    rbTodos: TRdxRadioButton;
    FechaIni: TcxDateEdit;
    FechaFin: TcxDateEdit;
    rbFechas: TRdxRadioButton;
    Label2: TLabel;
    procedure CodAlmacenPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure CodAlmacenPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure rbTodosClick(Sender: TObject);
    procedure rbFechasClick(Sender: TObject);
    procedure FechaIniPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure FechaFinPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure RdxFrameShow(Sender: TObject);
  private
    FFechaIni : TDateTime;
    FFechaFin : TDateTime;
    FCodigoAlmacen: Variant;
    procedure ActivarFechas;
    procedure DesactivarFechas;
    procedure RefrescarInforme; override;
    procedure SetCodigoAlmacen(const Value: Variant);
  protected
    procedure ActualizarEstado; override;
    procedure FreeContenido; override;
    procedure VerModal; override;
    function CambiarEntidad (EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;    
  public
    property CodigoAlmacen : Variant read FCodigoAlmacen write SetCodigoAlmacen;
    constructor Create(AOwner : TComponent); override;
  end;

var
  frListadoHistoricoMovimientos: TfrListadoHistoricoMovimientos;

implementation

uses
  TablaAlmacenes, Almacenes, StrFunc, RdxEmpresaActiva, Literales, NumFunc, 
  RdxFrameAlmacenes, InformeListadoMovimientos, Configuracion,
  DateFunc, Mensajes;

{$R *.DFM}

{ TfrListadoBase1 }

constructor TfrListadoHistoricoMovimientos.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ConfigurarFrame(Self, Self.Entidad);

  FCodigoAlmacen := NULL;
  FFechaIni := DarDiaInicioMesDat;
  FFechaFin := DarDiaFinalMesDat;
  FechaIni.Date := FFechaIni;
  FechaFin.Date := FFechaFin;

  FInforme := TdmInformeListadoMovimientos.Create(Self);
  FInforme.Preview := FVistaPrevia.Preview;
end;

procedure TfrListadoHistoricoMovimientos.SetCodigoAlmacen(const Value: Variant);
var
  DatosAlmacen : TDatosAlmacen;
begin
  if VarIsNull(Value) then
    exit;
    
  if FCodigoAlmacen <> Value then
  begin
    FCodigoAlmacen := Value;
    DatosAlmacen := TDatosAlmacen.Create;
    try
      DatosAlmacen.CodigoEmpresa := EmpresaActiva.Codigo;
      DatosAlmacen.Codigo := FCodigoAlmacen;
      if dmTablaAlmacenes.DarDatosAlmacen(DatosAlmacen) then
      begin
        CodAlmacen.Text := FCodigoAlmacen;
        NombreAlmacen.Text := DatosAlmacen.Nombre
      end
      else
        raise Exception.CreateFmt(msgAlmCodAlmNoExiste, [CodigoAlmacen]);
    finally
      DatosAlmacen.Free;
    end;
    RefrescarInforme;
  end;
end;

procedure TfrListadoHistoricoMovimientos.CodAlmacenPropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  EntidadModal := Entidad;
  ContenidoModal := TfrAlmacenes.Create(Self);
end;

procedure TfrListadoHistoricoMovimientos.CodAlmacenPropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin

  if (EsCadenaVacia(DisplayValue)) then
  begin
    VerMensaje(msgInfFaltaAlmacen);
    exit;
  end;

  if (dmTablaAlmacenes.validarCodigo(DisplayValue)) then begin
    //Comprueba que le numero es lo sufucientemente pequeño para ser un entero
    if not EsSmallInt(DisplayValue) then
    begin
      VerMensajeFmt(msgAlmCodAlmIncorrecto,[DisplayValue]);
      DisplayValue := '0';
      CodAlmacen.SetFocus;
    end
    else
    begin
      if (dmTablaAlmacenes.ExisteAlmacen(EmpresaActiva.Codigo, DisplayValue)) then
        CodigoAlmacen := DisplayValue
      else begin
        VerMensajeFmt(msgAlmCodAlmNoExiste, [DisplayValue]);
        CodAlmacen.SetFocus;
      end;
    end;
  end
  else begin
    VerMensajeFmt(msgAlmCodAlmIncorrecto, [DisplayValue]);
    CodAlmacen.SetFocus;
  end;
end;

procedure TfrListadoHistoricoMovimientos.rbTodosClick(Sender: TObject);
begin
  DesactivarFechas;
  RefrescarInforme;
end;

procedure TfrListadoHistoricoMovimientos.FreeContenido;
begin
  if (ContenidoModal is TRdxFrameAlmacenes) then
    CodigoAlmacen := (ContenidoModal as TRdxFrameAlmacenes).CodigoAlmacen;
  inherited FreeContenido;
end;

procedure TfrListadoHistoricoMovimientos.RefrescarInforme;
begin
  with (FInforme as TdmInformeListadoMovimientos) do
  begin
    CodigoAlmacen := FCodigoAlmacen;
    NombreAlmacen := Self.NombreAlmacen.Text;

    if rbTodos.Checked then
      Tipo := tiTodo
    else begin
        Tipo := tiPorFechas;
        FechaIni := FFechaIni;
        FechaFin := FFechaFin;
    end;
    Previsualizar;
  end;
end;

procedure TfrListadoHistoricoMovimientos.VerModal;
begin
  inherited;
end;

procedure TfrListadoHistoricoMovimientos.ActivarFechas;
begin
  FechaIni.Enabled := True;
  FechaIni.SetFocus;
  FechaFin.Enabled := True;
end;

procedure TfrListadoHistoricoMovimientos.DesactivarFechas;
begin
  FechaIni.Enabled := False;
  FechaFin.Enabled := False;
end;

procedure TfrListadoHistoricoMovimientos.rbFechasClick(Sender: TObject);
begin
  ActivarFechas;
  RefrescarInforme;
end;

procedure TfrListadoHistoricoMovimientos.FechaIniPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if (StrToDate(DisplayValue) > FechaFin.Date) then
  begin
    ErrorText := msgFechaIniMayor;
    Error := True;
    Exit;
  end;
  FFechaIni := StrToDate(DisplayValue);
  RefrescarInforme;
end;

procedure TfrListadoHistoricoMovimientos.FechaFinPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if (StrToDate(DisplayValue) < FechaIni.Date) then
  begin
    ErrorText := msgFechaIniMayor;
    Error := True;
    Exit;
  end;
  FFechaFin := StrToDate(DisplayValue);  
  RefrescarInforme;
end;

procedure TfrListadoHistoricoMovimientos.ActualizarEstado;
begin
  //
end;

procedure TfrListadoHistoricoMovimientos.RdxFrameShow(Sender: TObject);
begin
  DesactivarFechas;
  CodAlmacen.SetFocus;
end;

function TfrListadoHistoricoMovimientos.CambiarEntidad(EntidadAnterior,
  Entidad: TRdxEntidad): Boolean;
begin
  if not inherited CambiarEntidad(EntidadAnterior, Entidad) then
    Exit;

  ConfigurarFrame(Self, Self.Entidad);
end;

end.
