{
===============================================================================
  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.2
  Fecha versión actual: 07-04-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    06-02-2002    Ordenar el listado por 'Descripción' en vez de 'Código'.

    07-04-2002    Se ha adaptado para la transacción única.

    01-05-2004    p274. Actualización del informe a FastReport.        
===============================================================================
}

unit InformeListadoMateriales;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  InformeBase, FR_IBXDB, FR_Shape, FR_Class, FR_DSet, FR_DBSet, Db,
  IBCustomDataSet, IBQuery, IBDatabase;

type
  TdmInformeListadoMateriales = class(TdmInformeBase)
    TablaMateriales: TIBQuery;
    dsTablaMateriales: TfrDBDataSet;
  private
    FDescripcionIni: Variant;
    FDescripcionFin: Variant;
    FFamiliaIni : Variant;
    FFamiliaFin : Variant;
    procedure InformeGetParametersText(Memo : TStringList);
  protected
    procedure PrepararConsultas; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property DescripcionIni : Variant read FDescripcionIni write FDescripcionIni;
    property DescripcionFin : Variant read FDescripcionFin write FDescripcionFin;
    property FamiliaIni : Variant read FFamiliaIni write FFamiliaIni;
    property FamiliaFin : Variant read FFamiliaFin write FFamiliaFin;
  end;

var
  dmInformeListadoMateriales: TdmInformeListadoMateriales;

implementation

{$R *.DFM}

{ TdmInformeListadoMateriales }

uses
Literales;

constructor TdmInformeListadoMateriales.Create(AOwner: TComponent);
begin
  inherited;
  FDescripcionIni := NULL;
  FDescripcionFin := NULL;
  FFamiliaIni := NULL;
  FFamiliaFin := NULL;
  FNombreInforme := 'ListadoMateriales.frf';
  OnGetParametersText := InformeGetParametersText;  
end;

procedure TdmInformeListadoMateriales.InformeGetParametersText(
  Memo: TStringList);
begin
  with Memo do
  begin
    if (not VarIsNull(FDescripcionIni)) and (not VarIsNull(FDescripcionFin)) then
      Add(SysUtils.Format(msgInfIntervaloDesArt, [FDescripcionIni, FDescripcionFin]))
    else begin
      if (not VarIsNull(FFamiliaIni)) and (not VarIsNull(FFamiliaFin)) then
        Add(SysUtils.Format(msgInfIntervaloFam, [FFamiliaIni, FFamiliaFin]))
      else
        Add(msgInfIntervaloTodosArt)
    end;
  end;
end;

procedure TdmInformeListadoMateriales.PrepararConsultas;
begin
  with TablaMateriales do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select CODIGO, DESCRIPCION, FAMILIA, UNIDADESMEDIDA, PRECIO ');
    SQL.Add('from ARTICULOS');
    if (not VarIsNull(FDescripcionIni)) and (not VarIsNull(FDescripcionFin)) then
    begin
      SQL.Add('where upper(DESCRIPCION) between upper(:DESCRIPCIONINI) and upper(:DESCRIPCIONFIN) ');
      ParamByName('DESCRIPCIONINI').AsString := FDescripcionIni;
      ParamByName('DESCRIPCIONFIN').AsString := FDescripcionFin;
    end
    else begin
      if (not VarIsNull(FFamiliaIni)) and (not VarIsNull(FFamiliaFin)) then
      begin
        SQL.Add('where upper(FAMILIA) between upper(:FAMILIAINI) and upper(:FAMILIAFIN) ');
        ParamByName('FAMILIAINI').AsString := FFamiliaIni;
        ParamByName('FAMILIAFIN').AsString := FFamiliaFin;
      end;
    end;
    SQL.Add('order by DESCRIPCION');
    Prepare;
  end;
end;

end.
