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

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

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

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

unit InformeListadoMovimientos;

interface

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

type
  TdmInformeListadoMovimientos = class(TdmInformeBase)
    TablaMovimientos: TIBQuery;
    frdsTablaMovimientos: TfrDBDataSet;
  private
    FCodigoAlmacen: Integer;
    FFecFin: variant;
    FFecIni: variant;
    FNombreAlmacen: string;
    FTipo: TTipoInforme;
    procedure InformeGetParametersText(Memo : TStringList);
  protected
    procedure PrepararConsultas; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Tipo : TTipoInforme read FTipo write FTipo;
    property FechaIni : variant read FFecIni write FFecIni;
    property FechaFin : variant read FFecFin write FFecFin;
    property CodigoAlmacen : Integer read FCodigoAlmacen write FCodigoAlmacen;
    property NombreAlmacen : string read FNombreAlmacen write FNombreAlmacen;
  end;

var
  dmInformeListadoMovimientos: TdmInformeListadoMovimientos;

implementation

{$R *.DFM}

{ TdmInformeListadoMovimientos }

uses
  RdxEmpresaActiva, Literales;

constructor TdmInformeListadoMovimientos.Create(AOwner: TComponent);
begin
  inherited;
  FFecIni := NULL;
  FFecFin := NULL;
  FNombreInforme := 'ListadoMovimientos.frf';
  OnGetParametersText := InformeGetParametersText;
end;

procedure TdmInformeListadoMovimientos.InformeGetParametersText(
  Memo: TStringList);
begin
  with Memo do
  begin
    Add('Almacén: ' + IntToStr(CodigoAlmacen) + ' - ' + NombreAlmacen);
    case Tipo of
      tiTodo            : Add(msgInfIntervaloTodosMov);
      tiPorFechas       : Add(SysUtils.Format(msgInfIntervaloFec, [FFecIni, FFecFin]));
    end;
  end;
end;

procedure TdmInformeListadoMovimientos.PrepararConsultas;
begin
  TablaMovimientos.Database := FBaseDatos;
  TablaMovimientos.Transaction := FTransaccion;

  with TablaMovimientos.SQL do
  begin
    Clear;
    case Tipo of
      tiTodo        : begin
                        Add('select FECHA, TIPOOPERACION, TIPOMOVIMIENTO, ');
                        Add('DESCRIPCIONARTICULO, STOCKANTIGUO, STOCKNUEVO ');
                        Add('from MOVIMIENTOS ');
                        Add('where CODIGOALMACEN = :CODIGOALMACEN ');
                        Add('and CODIGOEMPRESA = :CODIGOEMPRESA ');
                        Add('group by FECHA, TIPOOPERACION, TIPOMOVIMIENTO, DESCRIPCIONARTICULO, STOCKANTIGUO, STOCKNUEVO ');
                        Add('order by FECHA');
                      end;
      tiPorFechas   : begin
                        Add('select FECHA, TIPOOPERACION, TIPOMOVIMIENTO, ');
                        Add('DESCRIPCIONARTICULO, STOCKANTIGUO, STOCKNUEVO ');
                        Add('from MOVIMIENTOS ');
                        Add('where CODIGOALMACEN = :CODIGOALMACEN AND ');
                        Add('FECHA between :FECHAINI and :FECHAFIN ');
                        Add('and CODIGOEMPRESA = :CODIGOEMPRESA ');
                        Add('group by FECHA, TIPOOPERACION, TIPOMOVIMIENTO, DESCRIPCIONARTICULO, STOCKANTIGUO, STOCKNUEVO ');
                        Add('order by FECHA');
                        TablaMovimientos.ParamByName('FECHAINI').AsDate := FFecIni;
                        TablaMovimientos.ParamByName('FECHAFIN').AsDate := FFecFin;
                      end;
    end;
    TablaMovimientos.ParambyName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    TablaMovimientos.ParambyName('CODIGOALMACEN').AsInteger := CodigoAlmacen;
  end;
end;

end.
