{
===============================================================================
  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: 11-08-2002
  Versión actual: 1.0.2
  Fecha versión actual: 29-06-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    08-03-2003    Se han puesto componentes con calendario.

    13-03-2003    p262. Informe con la lista de todos los pedidos a proveedor.

    29-06-2004    p272. Adaptación a multiempresa.

    29-06-2004    p274. Actualización del informe a FastReport.
===============================================================================
}

unit ListadoPedidosProv;

interface

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

type
  TfrListadoPedidosProv = class(TRdxFrame)
    Label1: TLabel;
    FechaIni: TcxDateEdit;
    Label2: TLabel;
    FechaFin: TcxDateEdit;
    Bevel1: TBevel;
    rbCodigo: TRdxRadioButton;
    eCodigoIni: TLabel;
    NombreProveedor: TRdxEdit;
    rbTodos: TRdxRadioButton;
    eInfoCriterios: TLabel;
    CodProv: TcxButtonEdit;
    pnlVistaPrevia: TPanel;
    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 rbTodosClick(Sender: TObject);
    procedure rbCodigoClick(Sender: TObject);
    procedure CodCliPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure CodCliPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure RdxFrameShow(Sender: TObject);
  private
    FInforme: TdmInformeListadoPedidosProv;
    FFechaIni: Variant;
    FFechaFin: Variant;
    FCodigoProveedor: Variant;
    FVistaPrevia : TfrVistaPrevia;
    procedure ActivarProveedor;
    procedure DesactivarProveedor;
    procedure SetCodigoProveedor(const Value: Variant);
    procedure RefrescarInforme;
  protected
    procedure FreeContenido; override;
    procedure VerModal; override;
  public
    property CodigoProveedor : Variant read FCodigoProveedor write SetCodigoProveedor;
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  end;

var
  frListadoPedidosProv: TfrListadoPedidosProv;

implementation

{$R *.DFM}

{ TfrListadoPedidosProv }

uses
  Configuracion, Literales, DateFunc,
  TablaProveedores, Proveedores, StrFunc, Variants;

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

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

  FVistaPrevia := TfrVistaPrevia.Create(Self);
  FVistaPrevia.Parent := pnlVistaPrevia;
  
  FInforme := TdmInformeListadoPedidosProv.Create(Self);
  FInforme.Preview := FVistaPrevia.Preview;
  // ¡¡¡ REVISAR !!!
  RefrescarInforme;
end;

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

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

procedure TfrListadoPedidosProv.RefrescarInforme;
begin
  with (FInforme as TdmInformeListadoPedidosProv) do
  begin
    FechaIni := FFechaIni;
    FechaFin := FFechaFin;
    if rbTodos.Checked then
      Tipo := tiTodo
    else begin
      Tipo := tiPorProveedor;
      CodigoProveedor := FCodigoProveedor;
      NombreProveedor := Self.NombreProveedor.Text;
    end;
    Previsualizar;
  end;
end;

procedure TfrListadoPedidosProv.ActivarProveedor;
begin
  CodProv.Enabled := True;
  CodProv.SetFocus;
  NombreProveedor.Enabled := True;
end;

procedure TfrListadoPedidosProv.DesactivarProveedor;
begin
  CodProv.Enabled := False;
  NombreProveedor.Enabled := False;
end;

procedure TfrListadoPedidosProv.SetCodigoProveedor(const Value: Variant);
var
  DatosProveedor : TDatosProveedor;
begin
  if FCodigoProveedor <> Value then
  begin
    FCodigoProveedor := Value;
    DatosProveedor := TDatosProveedor.Create(FCodigoProveedor);
    try
      CodProv.Text := FCodigoProveedor;
      NombreProveedor.Text := DatosProveedor.Nombre;
    finally
      DatosProveedor.Free;
    end;
    RefrescarInforme;
  end;
end;

procedure TfrListadoPedidosProv.rbTodosClick(Sender: TObject);
begin
  DesactivarProveedor;
  RefrescarInforme;
end;

procedure TfrListadoPedidosProv.rbCodigoClick(Sender: TObject);
begin
  ActivarProveedor;
  RefrescarInforme;
end;

procedure TfrListadoPedidosProv.CodCliPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ModoModal := Seleccionar;
  ContenidoModal := TfrProveedores.Create(Self);
end;

procedure TfrListadoPedidosProv.CodCliPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin  
  if EsCadenaVacia (DisplayValue) then
  begin
    Error := True;
    ErrorText := msgProvFaltaCodigo;
    Exit;
  end;

  if (dmTablaProveedores.ValidarCodigo(DisplayValue)) then
  begin
    DisplayValue := dmTablaProveedores.FormatearCodigo(DisplayValue);
    if (not dmTablaProveedores.ExisteCodigo(DisplayValue)) then
    begin
      Error := True;
      ErrorText := Format(msgProvCodProvNoExiste, [DisplayValue]);
      Exit;
    end;
  end
  else begin
    Error := True;
    ErrorText := Format(msgProvCodProvIncorrecto, [DisplayValue]);
    Exit;
  end;

  CodigoProveedor := DisplayValue;
end;

procedure TfrListadoPedidosProv.VerModal;
begin
  if (ContenidoModal is TfrProveedores) then
    (ContenidoModal as TfrProveedores).CodigoProveedor := FCodigoProveedor;
  inherited;
end;

procedure TfrListadoPedidosProv.FreeContenido;
begin
  if (ContenidoModal is TfrProveedores) then
    CodigoProveedor := (ContenidoModal as TfrProveedores).CodigoProveedor;
  inherited;
end;

procedure TfrListadoPedidosProv.RdxFrameShow(Sender: TObject);
begin
  DesactivarProveedor;
  FechaIni.SetFocus;
end;

destructor TfrListadoPedidosProv.Destroy;
begin
  FreeAndNIL(FInforme);
  inherited;
end;

end.
 