{
===============================================================================
  Copyright (©) 2003. 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: 26-02-2003
  Versión actual: 1.0.3
  Fecha versión actual: 04-02-2005
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    30-01-2004    Se utiliza el trimestre por defecto.
    30-03-2004    Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA)
    04-02-2005    Se elimnina la separación entre el informe resumen facturas e historial
                  facturas quedando un único informe desde el que acceder a ambos.
===============================================================================
}

unit HistorialFacturacionProveedores;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RdxFrame, RdxTitulos, cxDropDownEdit, cxCalendar, cxDBEdit,
  RdxBotones, RdxPaneles, RdxBarras, cxMaskEdit, cxButtonEdit, cxControls,
  cxContainer, cxEdit, cxTextEdit, StdCtrls, AdvPanel, ExtCtrls, Configuracion,
  cxCheckBox, cxSpinEdit, InformeHistorialFacturacionProveedores, VistaPrevia,
  TablaProveedores, TablaTrimestres, RdxRadioButton, RdxShape, Entidades,
  InformeResumenFacturacionProveedores;

type
  TfrHistorialFacturacionProveedores = class(TRdxFrame)
    pnlTitulo: TRdxPanelTituloOperacion;
    pnlCuerpo: TPanel;
    pnlProveedor: TAdvPanel;
    e1: TLabel;
    pnlVistaPrevia: TPanel;
    Label2: TLabel;
    cbCantidadMin: TcxCheckBox;
    CantidadMinima: TcxSpinEdit;
    NombreProvIni: TcxButtonEdit;
    NombreProvFin: TcxButtonEdit;
    RdxShape1: TRdxShape;
    rbTrimestre: TRdxRadioButton;
    cbxTrimestres: TcxComboBox;
    rbFechas: TRdxRadioButton;
    FechaInicial: TcxDateEdit;
    eFechaFin: TLabel;
    FechaFinal: TcxDateEdit;
    cbAgrupar: TcxCheckBox;
    procedure cbCantidadMinClick(Sender: TObject);
    procedure cbCantidadMinPropertiesChange(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 CantidadMinimaPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure NombreProvIniPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure NombreProvFinPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure NombreProvIniPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure NombreProvFinPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure cbxTrimestresPropertiesEditValueChanged(Sender: TObject);
    procedure rbTrimestreClick(Sender: TObject);
    procedure rbFechasClick(Sender: TObject);
    procedure cbAgruparPropertiesChange(Sender: TObject);
  private
    FVistaPrevia : TfrVistaPrevia;
    FInforme : TdmInformeHistorialFacturacionProveedores;
    FInforme2 : TdmInformeResumenFacturacionProveedores;
    FProveedorIni : TDatosProveedor;
    FProveedorFin : TDatosProveedor;
    FCodigoProveedorAux : Variant;
    FListaTrimestres : TListaTrimestres;
    FAgrupado : Boolean;
    procedure SetAgrupado(const Value: Boolean);
  protected
    property Agrupado: Boolean read FAgrupado write SetAgrupado;
    procedure VerModal; override;
    procedure FreeContenido; override;
    function CloseFrame : Boolean; override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;    
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  end;

var
  frHistorialFacturacionProveedores: TfrHistorialFacturacionProveedores;

implementation

{$R *.dfm}

{ TfrHistorialFacturacionProveedores }

uses
  Literales, Mensajes, DateFunc, StrFunc, DateUtils, InformeBase,
  Proveedores, RdxFrameProveedores, cxDateUtils;

constructor TfrHistorialFacturacionProveedores.Create(AOwner: TComponent);
var
  NombreAux : String;
begin
  inherited Create(AOwner);
  Entidad := entHistorialFacturacionProveedores;
  FAgrupado := True;
  
  FProveedorIni := TDatosProveedor.Create;
  FProveedorFin := TDatosProveedor.Create;

  FechaInicial.Date := DarDiaInicioMesDat;
  FechaFinal.Date := DarDiaFinalMesDat;

  NombreAux := dmTablaProveedores.DarNombreProvMin;
  FProveedorIni.Codigo := '';
  FProveedorIni.Nombre := NombreAux;
  FProveedorIni.ObtenerDatos;
  NombreProvIni.EditingText := FProveedorIni.Nombre;

  NombreAux := dmTablaProveedores.DarNombreProvMax;
  FProveedorFin.Codigo := '';
  FProveedorFin.Nombre := NombreAux;
  FProveedorFin.ObtenerDatos;
  NombreProvFin.EditingText := FProveedorFin.Nombre;

  FVistaPrevia := TfrVistaPrevia.Create(Self);
  FVistaPrevia.Parent := pnlVistaPrevia;

  FInforme := TdmInformeHistorialFacturacionProveedores.Create(Self);
  with FInforme do
  begin
    Preview := FVistaPrevia.Preview;
    NombreIni := FProveedorIni.Nombre;
    NombreFin := FProveedorFin.Nombre;
    //FechaFacIni := FechaIni.Date;
    //FechaFacFin := FechaFin.Date;
    if cbCantidadMin.Checked then
      ImporteMinimo := CantidadMinima.Value
    else
      ImporteMinimo := NULL;
    //Previsualizar;
  end;

  FInforme2 := TdmInformeResumenFacturacionProveedores.Create(Self);
  with FInforme2 do
  begin
    Preview := FVistaPrevia.Preview;
    NombreIni := FProveedorIni.Nombre;
    NombreFin := FProveedorFin.Nombre;
    //FechaFacIni := FechaIni.Date;
    //FechaFacFin := FechaFin.Date;
    if cbCantidadMin.Checked then
      ImporteMinimo := CantidadMinima.Value
    else
      ImporteMinimo := NULL;
    //Previsualizar;
  end;

  FListaTrimestres := TListaTrimestres.Create(tlcTriTodos);
  cbxTrimestres.ItemIndex := FListaTrimestres.cargarLista(cbxTrimestres.Properties.Items);
end;

destructor TfrHistorialFacturacionProveedores.Destroy;
begin
  FInforme.Free;
  FInforme := Nil;
  FInforme2.Free;
  FInforme2 := Nil;
  FProveedorIni.Free;
  FProveedorIni := Nil;
  FProveedorFin.Free;
  FProveedorFin := Nil;

  FListaTrimestres.Free;
  FListaTrimestres := Nil;
  
  inherited;
end;

procedure TfrHistorialFacturacionProveedores.cbCantidadMinClick(
  Sender: TObject);
begin
  CantidadMinima.Enabled := cbCantidadMin.Checked;
end;

procedure TfrHistorialFacturacionProveedores.cbCantidadMinPropertiesChange(
  Sender: TObject);
begin
  if cbCantidadMin.Checked then
  begin
    FInforme.ImporteMinimo := CantidadMinima.Value;
    FInforme2.ImporteMinimo := CantidadMinima.Value;
  end
  else
  begin
    FInforme.ImporteMinimo := NULL;
    FInforme2.ImporteMinimo := NULL;
  end;

  if Agrupado then
     FInforme.Previsualizar
  else
     FInforme2.Previsualizar;
end;

procedure TfrHistorialFacturacionProveedores.VerModal;
begin
  if (ContenidoModal is TRdxFrameProveedores) then
    (ContenidoModal as TRdxFrameProveedores).CodigoProveedor := FCodigoProveedorAux;
  inherited;
end;

procedure TfrHistorialFacturacionProveedores.FreeContenido;
begin
  if (ContenidoModal is TRdxFrameProveedores) then
    FCodigoProveedorAux := (ContenidoModal as TRdxFrameProveedores).CodigoProveedor;
  inherited;
end;

procedure TfrHistorialFacturacionProveedores.FechaIniPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
var
  ADate : TDateTime;
begin
  try
    if DisplayValue > FechaFinal.Date then
    begin
      ErrorText := msgFechasMal;
      Error := True;
      Exit;
    end;
    TextToDateEx(DisplayValue, ADate);
    FInforme.FechaFacIni := ADate;
    FInforme2.FechaFacIni := ADate;

    if Agrupado then
       FInforme.Previsualizar
    else
       FInforme2.Previsualizar;
  except
    Error := True;
    ErrorText := msgFechaNoValida;
  end;
end;

procedure TfrHistorialFacturacionProveedores.FechaFinPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
var
  ADate : TDateTime;
begin
  try
    if DisplayValue < FechaInicial.Date then
    begin
      ErrorText := msgFechasMal;
      Error := True;
      Exit;
    end;
    TextToDateEx(DisplayValue, ADate);
    FInforme.FechaFacFin := ADate;
    FInforme2.FechaFacFin := ADate;

    if Agrupado then
       FInforme.Previsualizar
    else
       FInforme2.Previsualizar;
  except
    Error := True;
    ErrorText := msgFechaNoValida;
  end;
end;

procedure TfrHistorialFacturacionProveedores.CantidadMinimaPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if cbCantidadMin.Checked then
  begin
    FInforme.ImporteMinimo := DisplayValue;
    FInforme2.ImporteMinimo := DisplayValue;
  end
  else
  begin
    FInforme.ImporteMinimo := NULL;
    FInforme2.ImporteMinimo := NULL;
  end;

  if Agrupado then
     FInforme.Previsualizar
  else
     FInforme2.Previsualizar;
end;

procedure TfrHistorialFacturacionProveedores.NombreProvIniPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, NombreProvFin.Text) > 0 then
  begin
    ErrorText := msgProvIniMayor;
    Error := True;
    Exit;
  end;
  FProveedorIni.Nombre := DisplayValue;
  FProveedorIni.Codigo := '';
  FInforme.NombreIni := FProveedorIni.Nombre;
  FInforme2.NombreIni := FProveedorIni.Nombre;

  if Agrupado then
     FInforme.Previsualizar
  else
     FInforme2.Previsualizar;
end;

procedure TfrHistorialFacturacionProveedores.NombreProvFinPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, NombreProvIni.Text) < 0 then
  begin
    ErrorText := msgProvIniMayor;
    Error := True;
    Exit;
  end;
  FProveedorFin.Nombre := DisplayValue;
  FProveedorFin.Codigo := '';
  FInforme.NombreFin := FProveedorFin.Nombre;
  FInforme2.NombreFin := FProveedorFin.Nombre;

  if Agrupado then
     FInforme.Previsualizar
  else
     FInforme2.Previsualizar;
end;

procedure TfrHistorialFacturacionProveedores.NombreProvIniPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrProveedores.Create(Self);
  if FCodigoProveedorAux <> Null then
  begin
    FProveedorIni.Codigo := FCodigoProveedorAux;
    FProveedorIni.ObtenerDatos;
    NombreProvIni.EditingText := FProveedorIni.Nombre;
    PostMessage(NombreProvIni.Handle,WM_KEYDOWN,VK_RETURN,0);
  end;
end;

procedure TfrHistorialFacturacionProveedores.NombreProvFinPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrProveedores.Create(Self);
  if FCodigoProveedorAux <> Null then
  begin
    FProveedorFin.Codigo := FCodigoProveedorAux;
    FProveedorFin.ObtenerDatos;
    NombreProvFin.EditingText := FProveedorFin.Nombre;
    PostMessage(NombreProvFin.Handle,WM_KEYDOWN,VK_RETURN,0);
  end;
end;

procedure TfrHistorialFacturacionProveedores.cbxTrimestresPropertiesEditValueChanged(
  Sender: TObject);
var
  FCodigoTrimestre : String;
begin
  FCodigoTrimestre := FListaTrimestres.getCodItem(cbxTrimestres.ItemIndex);
  FechaInicial.Date := dmTablaTrimestres.darFechaIniTrimestre(FCodigoTrimestre);
  FechaFinal.Date := dmTablaTrimestres.darFechaFinTrimestre(FCodigoTrimestre);
  FInforme.FechaFacIni := FechaInicial.Date;
  FInforme.FechaFacFin := FechaFinal.Date;
  FInforme2.FechaFacIni := FechaInicial.Date;
  FInforme2.FechaFacFin := FechaFinal.Date;

  if Agrupado then
     FInforme.Previsualizar
  else
     FInforme2.Previsualizar;
end;

procedure TfrHistorialFacturacionProveedores.rbTrimestreClick(
  Sender: TObject);
begin
  cbxTrimestres.Enabled := True;
  FechaInicial.Enabled := False;
  FechaFinal.Enabled := False;
  cbxTrimestresPropertiesEditValueChanged(Sender);
end;

procedure TfrHistorialFacturacionProveedores.rbFechasClick(
  Sender: TObject);
begin
  cbxTrimestres.Enabled := False;
  FechaInicial.Enabled := True;
  FechaFinal.Enabled := True;
end;

function TfrHistorialFacturacionProveedores.CloseFrame: Boolean;
begin
  FInforme.Preview := NIL;
  FInforme2.Preview := NIL;  
  (FVistaPrevia as TRdxFrame).CloseFrame;
  Result := inherited CloseFrame;
end;

function TfrHistorialFacturacionProveedores.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean;
begin
  inherited CambiarEntidad(EntidadAnterior, Entidad);
  ConfigurarFrame(Self, Self.Entidad);
end;

procedure TfrHistorialFacturacionProveedores.cbAgruparPropertiesChange(
  Sender: TObject);
begin
  Agrupado := not Agrupado;
end;

procedure TfrHistorialFacturacionProveedores.SetAgrupado(
  const Value: Boolean);
begin
  FAgrupado := Value;
  if Agrupado then
     FInforme.Previsualizar
  else
     FInforme2.Previsualizar;
end;

end.
