unit uBizInventario;

interface

uses
  uDAInterfaces, uDADataTable, schInventarioClient_Intf,
  uBizArticulos, uDBSelectionListUtils;

const
  BIZ_CLIENT_INVENTARIO = 'Client.Inventario';
  BIZ_CLIENT_DETALLE_RESERVAS_INV = 'Client.DetallesReservasInv';

  CTE_TIPO_ENTRADA = 'E';
  CTE_TIPO_SALIDA = 'S';

type
  TEnumTipoMovimiento = (tEntradaLibre,
                         tSalidaLibre,
                         tTraslado,
                         tEntradaPedidoProveedor,
                         tSalidaAlbaranCliente);

  IBizDetalleReservas = interface(IDetalle_Reservas_Inv)
  ['{7E718670-DDC1-411B-B8DF-A28B81F9B8C3}']
  end;

  IBizInventario = interface(IInventario)
  ['{12051CDB-9BB1-43C5-AC89-181A27A35513}']
    function GetIDAlmacenOrigen: Integer;
    procedure SetIDAlmacenOrigen(const Value: Integer);
    property IDAlmacenOrigen: Integer read GetIDAlmacenOrigen write SetIDAlmacenOrigen;

    function GetIDAlmacenDestino: Integer;
    procedure SetIDAlmacenDestino(const Value: Integer);
    property IDAlmacenDestino: Integer read GetIDAlmacenDestino write SetIDAlmacenDestino;

    function GetTipo: TEnumTipoMovimiento;
    procedure SetTipo(const Value: TEnumTipoMovimiento);
    property TipoMovimiento: TEnumTipoMovimiento read GetTipo write SetTipo;
  end;

  TBizDetalleReservas = class(TDetalle_reservas_InvDataTableRules, IBizDetalleReservas)
  end;

  TBizInventario = class(TInventarioDataTableRules, IBizInventario, ISeleccionable)
  private
    FIDAlmacenOrigen : Integer;
    FIDAlmacenDestino : Integer;
    FTipoMovimiento : TEnumTipoMovimiento;
    function GetIDAlmacenOrigen: Integer;
    procedure SetIDAlmacenOrigen(const Value: Integer);
    function GetIDAlmacenDestino: Integer;
    procedure SetIDAlmacenDestino(const Value: Integer);
    function GetTipo: TEnumTipoMovimiento;
    procedure SetTipo(const Value: TEnumTipoMovimiento);
  protected
    FSeleccionableInterface : ISeleccionable;
    procedure OnNewRecord(Sender: TDADataTable); override;
    procedure OnCalcFields(Sender: TDADataTable); override;

  public
    property IDAlmacenOrigen: Integer read GetIDAlmacenOrigen write SetIDAlmacenOrigen;
    property IDAlmacenDestino: Integer read GetIDAlmacenDestino write SetIDAlmacenDestino;
    property TipoMovimiento: TEnumTipoMovimiento read GetTipo write SetTipo;
    property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
        write FSeleccionableInterface implements ISeleccionable;

    constructor Create(aDataTable: TDADataTable); override;
    destructor Destroy; override;
  end;

implementation

uses
  Dialogs, uDACDSDataTable, SysUtils;

{ TBizInventario }

constructor TBizInventario.Create(aDataTable: TDADataTable);
begin
  inherited;
  IDAlmacenOrigen := -1;
  IDAlmacenDestino := -1;
  TipoMovimiento := tEntradaLibre;
  FSeleccionableInterface := TSeleccionable.Create(aDataTable);
end;

destructor TBizInventario.Destroy;
begin
  FSeleccionableInterface := NIL;
  inherited;
end;


procedure TBizInventario.OnCalcFields(Sender: TDADataTable);
begin
  inherited;
  ID := Self.DataTable.RecIDValue;
end;

procedure TBizInventario.OnNewRecord(Sender: TDADataTable);
begin
  inherited;

  //Este ID realmente se corresponderá con el de la tabla de movimientos.
  ID := GetRecNo;

  //En función del tipo de operación vamos a coger el IDAlmacenOrigen o IDAlamcenDetino
  Case TipoMovimiento of
    tEntradaLibre, tEntradaPedidoProveedor : ID_ALMACEN := IDAlmacenDestino;
    tSalidaLibre, tSalidaAlbaranCliente, tTraslado : ID_ALMACEN := IDAlmacenOrigen;
  End;
end;

function TBizInventario.GetIDAlmacenDestino: Integer;
begin
  Result := FIDAlmacenDestino;
end;

function TBizInventario.GetIDAlmacenOrigen: Integer;
begin
  Result := FIDAlmacenOrigen;
end;

function TBizInventario.GetTipo: TEnumTipoMovimiento;
begin
  Result := FTipoMovimiento;
end;

procedure TBizInventario.SetIDAlmacenDestino(const Value: Integer);
begin
  FIDAlmacenDestino := Value;
end;

procedure TBizInventario.SetIDAlmacenOrigen(const Value: Integer);
begin
  FIDAlmacenOrigen := Value;
end;

procedure TBizInventario.SetTipo(const Value: TEnumTipoMovimiento);
begin
  FTipoMovimiento := Value;
end;

initialization
  RegisterDataTableRules(BIZ_CLIENT_INVENTARIO, TBizInventario);
  RegisterDataTableRules(BIZ_CLIENT_DETALLE_RESERVAS_INV, TBizDetalleReservas);

end.
