{
===============================================================================
  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: 07-04-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    07-04-2002    Se ha adaptado a una unica transacción.
===============================================================================
}

unit HistoricoMovimiento;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Db, IBCustomDataSet, Mask, DBCtrls, Buttons, ToolEdit,
  IB, IBDatabase, RdxBarras, RdxBotones,  RdxCampos, RdxMemo, RdxComboBox,
  RdxCheckBox, RdxTitulos, RdxPaneles, Colores, Mensajes, Tipos,
  RdxFrameHistoricoMovimientos;

type
  TfrHistoricoMovimiento = class(TRdxFrameHistoricoMovimientos)
    brSalir: TRdxBarraInferior;
    bSalir: TRdxBoton;
    pnlScroll: TRdxScrollPanel;
    pnlDetalles: TRdxPanel;
    eCantidad: TLabel;
    eStockAnterior: TLabel;
    eStockNuevo: TLabel;
    eClienteAsociado: TLabel;
    eFecha: TLabel;
    eCausa: TLabel;
    cDetalles: TRdxCabecera;
    eHora: TLabel;
    pnlDatos: TRdxPanel;
    cDatos: TRdxCabecera;
    eTipoOperacion: TLabel;
    eTipoMovimiento: TLabel;
    eUsuario: TLabel;
    Codigo: TRdxDBEdit;
    eCodigo: TLabel;
    eUnidades: TLabel;
    Descripcion: TRdxDBEdit;
    eDescripcion: TLabel;
    eFamilia: TLabel;
    TipoOperacion: TRdxDBEdit;
    Hora: TRdxDBEdit;
    Cantidad: TRdxDBEdit;
    Fecha: TRdxDBEdit;
    StockAnterior: TRdxDBEdit;
    TipoMovimiento: TRdxDBEdit;
    StockNuevo: TRdxDBEdit;
    Cliente: TRdxDBEdit;
    Usuario: TRdxDBEdit;
    Familia: TRdxDBEdit;
    UnidadesMedida: TRdxDBEdit;
    pnlAlmacen: TRdxPanel;
    CArticulo: TRdxCabecera;
    eAlmacen: TLabel;
    dsMovimientos: TDataSource;
    brDoble: TRdxBarraInferior;
    bAceptar: TRdxBoton;
    bCancelar: TRdxBoton;
    Observaciones: TRdxDBMemo;
    cbxAlmacen: TRdxDBComboBox;
    Titulo: TRdxPanelTituloOperacion;
    procedure bAceptarClick(Sender: TObject);
    procedure bCancelarGuardarClick(Sender: TObject);
    procedure bSalirClick(Sender: TObject);
  protected
    procedure ActivarModoConsultar; override;
    procedure ActivarModoEliminar; override;
    function EliminarDatos : Boolean; override;
    function CancelarEliminar : Boolean; override;
    procedure BuscarAlmacen; override;
    procedure BuscarMovimiento; override;
    function ComprobarDatos: Boolean; override;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  end;

var
  frHistoricoMovimiento: TfrHistoricoMovimiento;

implementation
{$R *.DFM}

uses
  BaseDatos, TablaHistoricoMovimientos, TablaAlmacenes, Excepciones,
  Configuracion, RdxEmpresaActiva, Literales, Entidades, Variants;

constructor TfrHistoricoMovimiento.Create(AOwner : TComponent);
var
  i : integer;
begin
  inherited Create(AOwner);
  Entidad := entMovimiento;
  ConfigurarFrame(Self, Self.Entidad);

  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaMovimientos := TIBDataSet.Create(Self);
  dsMovimientos.DataSet := TablaMovimientos;
  with TablaMovimientos do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaHistoricoMovimientos.sqlConsultar);
    DeleteSQL.Assign(dmTablaHistoricoMovimientos.sqlEliminar);
    RefreshSQL.Assign(dmTablaHistoricoMovimientos.sqlConsultar);
  end;

  {Carga todos los almacenes en el combox, como no habra posibilidad de cambio,
   da igual la entidad que sea}
  dmTablaAlmacenes.darAlmacenes(EmpresaActiva.Codigo, FListaAlmacenesCodigo,FListaCodigosAlmacen);
  for i:=0 to FListaAlmacenesCodigo.Count-1 do
    cbxAlmacen.Items.Add(FListaAlmacenesCodigo.Names[i]);
end;

destructor TfrHistoricoMovimiento.Destroy;
begin
  TablaMovimientos.Close;
  TablaMovimientos.UnPrepare;
  TablaMovimientos.Free;
  inherited;
end;


procedure TfrHistoricoMovimiento.bSalirClick(Sender: TObject);
begin
  try
    Rollback;
    CloseFrame;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrHistoricoMovimiento.ActivarModoConsultar;
begin
  dsMovimientos.AutoEdit := False;
  try
    TablaMovimientos.Open;
    if TablaMovimientos.RecordCount = 0 then
    begin
      VerMensaje(msgMovNoExiste);
      CloseFrame;
      Exit;
    end;
    TablaMovimientos.Cancel;
    Visible := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrHistoricoMovimiento.ActivarModoEliminar;
begin
  dsMovimientos.AutoEdit := False;
  try
    TablaMovimientos.Open;
    if TablaMovimientos.RecordCount = 0 then
    begin
      VerMensaje(msgMovNoExiste);
      CancelarEliminar;
      CloseFrame;
      Exit;
    end;
    TablaMovimientos.Cancel;
    Visible := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;

end;

procedure TfrHistoricoMovimiento.bAceptarClick(Sender: TObject);
begin
  if (RealizarOperacion) then
    CloseFrame;
end;

procedure TfrHistoricoMovimiento.bCancelarGuardarClick(Sender: TObject);
begin
  if (TratarCambios = IDOK) then
    CloseFrame;
end;

procedure TfrHistoricoMovimiento.BuscarAlmacen;
begin
  cbxAlmacen.ItemIndex := cbxAlmacen.Items.IndexOf(FListaCodigosAlmacen.Values[CodigoAlmacen]);
end;

procedure TfrHistoricoMovimiento.BuscarMovimiento;
begin
  if Transaccion = NIL then
    exit;
  try
    TablaMovimientos.Close;

    // Buscar la fila a tratar si es necesario
    if (not VarIsNull(CodigoMovimiento)) then
        TablaMovimientos.Params.ByName('CODIGO').AsString := CodigoMovimiento;

    TablaMovimientos.Prepare;
    TablaMovimientos.Open;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrHistoricoMovimiento.CancelarEliminar: Boolean;
begin
  Result := False;
  try
    RollBack;
    TablaMovimientos.Close;
    Result := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

function TfrHistoricoMovimiento.ComprobarDatos: Boolean;
begin
  Result := True;
end;

function TfrHistoricoMovimiento.EliminarDatos: Boolean;
begin
  Result := False;
  try
    TablaMovimientos.Delete;
    Commit;
    TablaMovimientos.Close;
    Result := True;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;


end.
