{
===============================================================================
  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.4
  Fecha versión actual: 28-06-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    27-01-2002    El informe de IVA de facturas se realiza por intervalo de
                  fecha de factura.

    05-03-2002    El informe de facturas pendientes se realiza por intervalo de
                  fecha de factura.

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

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

unit ListadoFacturasProvPenIVA;

interface

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

type
  TfrListadoFacturasProvPenIVA = class(TfrListadoBase)
    Label1: TLabel;
    FechaIni: TcxDateEdit;
    Label2: TLabel;
    FechaFin: TcxDateEdit;
    rbTodos: TRdxRadioButton;
    rbCodigo: TRdxRadioButton;
    eCodigoIni: TLabel;
    NombreProv: TRdxEdit;
    Bevel1: TBevel;
    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 CodProvPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure CodProvPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure RdxFrameShow(Sender: TObject);
    procedure rbTodosClick(Sender: TObject);
    procedure rbCodigoClick(Sender: TObject);
  private
    FFechaIni: Variant;
    FFechaFin: Variant;
    FCodigoProveedor: Variant;
    procedure RefrescarInforme; override;
    procedure SetCodigoProveedor(const Value: Variant);
    procedure ActivarProveedor;
    procedure DesactivarProveedor;
  protected
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
    procedure VerModal; override;
    procedure FreeContenido; override;
  public
    property CodigoProveedor : Variant read FCodigoProveedor write SetCodigoProveedor;
    constructor Create (AOwner : TComponent); override;
  end;

var
  frListadoFacturasProvPenIVA: TfrListadoFacturasProvPenIVA;

implementation

{$R *.DFM}

{ TfrListadoFacturasCliPenIVA }

uses
  Configuracion, Literales, InformeListadoFacturasProvPendientes, StrFunc,
  InformeListadoFacturasProvIVA, TablaProveedores, Proveedores, DateFunc;

function TfrListadoFacturasProvPenIVA.CambiarEntidad(EntidadAnterior,
  Entidad: TRdxEntidad): Boolean;
begin
  Result := inherited CambiarEntidad(EntidadAnterior, Entidad);
  case Entidad of
    entListadoFacturasProvPendientes : begin
                eInformacion.Caption := msgInfTextoListarFacturasProv;
                FInforme := TdmInformeListadoFacturasProvPendientes.Create(Self);
    end;
    entListadoFacturasProvIVA : begin
                eInformacion.Caption := msgInfTextoListarFacturasProvIVA;
                FInforme := TdmInformeListadoFacturasProvIVA.Create(Self);
    end;
  end;
  FInforme.Preview := FVistaPrevia.Preview;
  ConfigurarFrame(Self, Self.Entidad);
  RefrescarInforme;
end;

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

procedure TfrListadoFacturasProvPenIVA.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 TfrListadoFacturasProvPenIVA.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 TfrListadoFacturasProvPenIVA.RefrescarInforme;
begin
  if Entidad = entListadoFacturasProvPendientes then
  begin
    with (FInforme as TdmInformeListadoFacturasProvPendientes) 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.NombreProv.Text;
      end;
      Previsualizar;
    end;
  end;

  if Entidad = entListadoFacturasProvIVA then
  begin
    with (FInforme as TdmInformeListadoFacturasProvIVA) 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.NombreProv.Text;
      end;
      Previsualizar;
    end;
  end;
end;

procedure TfrListadoFacturasProvPenIVA.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;
      NombreProv.Text := DatosProveedor.Nombre;
    finally
      DatosProveedor.Free;
    end;
    RefrescarInforme;
  end;
end;

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

procedure TfrListadoFacturasProvPenIVA.CodProvPropertiesValidate(
  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 TfrListadoFacturasProvPenIVA.FreeContenido;
begin
  if (ContenidoModal is TfrProveedores) then
    CodigoProveedor := (ContenidoModal as TfrProveedores).CodigoProveedor;
  inherited;
end;

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

procedure TfrListadoFacturasProvPenIVA.ActivarProveedor;
begin
  CodProv.Enabled := True;
  CodProv.SetFocus;
  NombreProv.Enabled := True;
end;

procedure TfrListadoFacturasProvPenIVA.DesactivarProveedor;
begin
  CodProv.Enabled := False;
  NombreProv.Enabled := False;
end;

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

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

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

end.
 