{
===============================================================================
  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: 14-05-2002
  Versión actual: 1.0.3
  Fecha versión actual: 28-06-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    09-10-2002    P247. Añadir al listado de facturas de proveedor la columna
                  de situación de factura.

    16-03-2003    p261. Poder realizar el informe eligiendo un proveedor concreto.

    28-06-2004    p272. Adaptación a multiempresa.
===============================================================================
}

unit ListadoFacturasProv;

interface

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

type
  TfrListadoFacturasProv = class(TfrListadoBase)
    Label1: TLabel;
    FechaIni: TcxDateEdit;
    Label2: TLabel;
    FechaFin: TcxDateEdit;
    Bevel1: TBevel;
    rbCodigo: TRdxRadioButton;
    eCodigoIni: TLabel;
    NombreProveedor: TRdxEdit;
    rbTodos: TRdxRadioButton;
    eInfoCriterios: TLabel;
    CodProv: TcxButtonEdit;
    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
    FFechaIni: Variant;
    FFechaFin: Variant;
    FCodigoProveedor: Variant;
    procedure ActivarProveedor;
    procedure DesactivarProveedor;
    procedure SetCodigoProveedor(const Value: Variant);
    procedure RefrescarInforme; override;
  protected
    procedure FreeContenido; override;  
    procedure VerModal; override;
  public
    property CodigoProveedor : Variant read FCodigoProveedor write SetCodigoProveedor;
    constructor Create (AOwner : TComponent); override;
  end;

var
  frListadoFacturasProv: TfrListadoFacturasProv;

implementation

{$R *.DFM}

{ TfrListadoFacturasCli }

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

constructor TfrListadoFacturasProv.Create(AOwner: TComponent);
begin
  inherited;
  ConfigurarFrame(Self, Self.Entidad);
  
  FFechaIni := DarDiaInicioMesDat;
  FFechaFin := DarDiaFinalMesDat;
  FechaIni.Date := FFechaIni;
  FechaFin.Date := FFechaFin;
  FCodigoProveedor := NULL;

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

procedure TfrListadoFacturasProv.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 TfrListadoFacturasProv.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 TfrListadoFacturasProv.RefrescarInforme;
begin
  with (FInforme as TdmInformeListadoFacturasProv) do
  begin
    FechaIni := FFechaIni;
    FechaFin := FFechaFin;
    if rbTodos.Checked then
      Tipo := tiTodo
    else begin
      Tipo := tiPorProveedor;
      if FCodigoProveedor = Null then
         Exit;
      CodigoProveedor := FCodigoProveedor;
      NombreProveedor := Self.NombreProveedor.Text;
    end;
    Previsualizar;
  end;
end;

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

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

procedure TfrListadoFacturasProv.SetCodigoProveedor(const Value: Variant);
var
  DatosProveedor : TDatosProveedor;
begin
  if Value = Null then
     Exit;

  if FCodigoProveedor <> Value then
  begin
    FCodigoProveedor := Value;
    DatosProveedor := TDatosProveedor.Create;
    try
      DatosProveedor.Codigo := FCodigoProveedor;
      dmTablaProveedores.DarDatosProveedor(DatosProveedor);
      CodProv.Text := FCodigoProveedor;
      NombreProveedor.Text := DatosProveedor.Nombre;
    finally
      DatosProveedor.Free;
    end;
    RefrescarInforme;
  end;
end;

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

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

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

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

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

  CodigoProveedor := DisplayValue;
end;

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

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

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

end.
 