unit uEditorHistoricoMovimientos;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  uCustomEditor, ImgList, PngImageList, StdActns, ActnList, TB2ExtItems, TBXExtItems, TBX, TB2Item,
  TB2Dock, TB2Toolbar, JvExControls, JvComponent, JvNavigationPane,
  uViewHistoricoMovimientos, Menus, DB, uDADataTable, ComCtrls, uViewGrid,
  uDAScriptingProvider, uDACDSDataTable, JvAppStorage,
  JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls, uCustomView,
  uViewBase, uViewBarraSeleccion, JvComponentBase, uEditorGridBase,
  uIEditorHistoricoMovimientos, uBizHistoricoMovimientos, uViewGridBase, uHistoricoMovimientosController,
  JvExComCtrls, JvStatusBar, uViewGrid2Niveles, JSDialog, uDAInterfaces;

type

  TfEditorHistoricoMovimientos = class(TfEditorGridBase, IEditorHistoricoMovimientos)
    rasladar1: TMenuItem;
    Liberar1: TMenuItem;
    Reservar1: TMenuItem;
    actExpandir: TAction;
    actContraer: TAction;
    JsElegirAlmacenDialog: TJSDialog;
    frViewHistoricoMovimientos1: TfrViewHistoricoMovimientos;
    procedure actModificarExecute(Sender: TObject);
    procedure actExpandirExecute(Sender: TObject);
    procedure actContraerExecute(Sender: TObject);

    procedure FormShow(Sender: TObject);

  private
    function SeleccionarAlmacen(Descripcion: String): Integer;
    function DarIDAlmacenSeleccionado(Descripcion: String): Integer;

  protected
    FHistoricoMovimientos: IBizHistoricoMovimientos;
    FController : IHistoricoMovimientosController;

    function GetHistoricoMovimientos: IBizHistoricoMovimientos;
    procedure SetHistoricoMovimientos(const Value: IBizHistoricoMovimientos);
    function GetController : IHistoricoMovimientosController; virtual;
    procedure SetController (const Value : IHistoricoMovimientosController); virtual;

    procedure SetMultiSelect (AValue : Boolean);
    function GetMultiSelect : Boolean;
    function GetArticulosSeleccionados: IBizHistoricoMovimientos;

    procedure NuevoInterno; override;
    procedure EliminarInterno; override;
    procedure ImprimirInterno; override;
    procedure PrevisualizarInterno; override;

  public
    property HistoricoMovimientos: IBizHistoricoMovimientos read GetHistoricoMovimientos write SetHistoricoMovimientos;
    property Controller : IHistoricoMovimientosController read GetController write SetController;
    property ArticulosSeleccionados: IBizHistoricoMovimientos read GetArticulosSeleccionados;
    property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect;

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure PonerTitulos(const ATitulo: string = ''); override;
  end;

implementation
{$R *.DFM}

uses
  cxControls, uGridUtils, uDataModuleHistoricoMovimientos, uDataModuleUsuarios,
  uEditorBase, uDBSelectionListUtils, cxGridDBTableView, cxGridCustomTableView,
  uAlmacenesController, uBizAlmacenes, uFactuGES_App;
  //, uGenerarAlbaranesProvUtils;

{, uDBSelectionList, uDataModulePedidosProveedor,
uBizPedidosProveedor, uBizMontajes, uDataModuleMontajes;
}


{ TfEditorHistoricoMovimientos }

{
***************************** TfEditorHistoricoMovimientos *****************************
}
constructor TfEditorHistoricoMovimientos.Create(AOwner: TComponent);
begin
  inherited;
  ViewGrid := frViewHistoricoMovimientos1;
end;

function TfEditorHistoricoMovimientos.DarIDAlmacenSeleccionado(Descripcion: String): Integer;
var
  AAlmacenes : IBizAlmacen;
  AAlmacenesController : IAlmacenesController;
  Respuesta : integer;
begin
  if (ViewGrid._Grid.ActiveLevel.Tag = -1) then
    Result := SeleccionarAlmacen(Descripcion)
  else
    Result := ViewGrid._Grid.ActiveLevel.Tag;
end;

destructor TfEditorHistoricoMovimientos.Destroy;
begin
  FHistoricoMovimientos := NIL;
  inherited;
end;

procedure TfEditorHistoricoMovimientos.EliminarInterno;
begin
//
end;

procedure TfEditorHistoricoMovimientos.FormShow(Sender: TObject);
begin
  inherited;

  if not Assigned(ViewGrid) then
    raise Exception.Create('No hay ninguna vista asignada');

  if not Assigned(HistoricoMovimientos) then
    raise Exception.Create('No hay ningún HistoricoMovimientos asignado');

  HistoricoMovimientos.DataTable.Active := True;
  actContraer.Execute;
  ViewGrid.GotoFirst;
end;

procedure TfEditorHistoricoMovimientos.actModificarExecute(Sender: TObject);
begin
//  inherited;
end;

function TfEditorHistoricoMovimientos.GetArticulosSeleccionados: IBizHistoricoMovimientos;
begin
  SeleccionarFilasDesdeGrid((ViewGrid as IViewHistoricoMovimientos)._FocusedView, (HistoricoMovimientos as ISeleccionable).SelectedRecords);
  // En Presupuestos.SelectedRecords tengo los ID de las filas seleccionadas del grid
//  Result := Controller.ExtraerSeleccionados(HistoricoMovimientos);
end;

function TfEditorHistoricoMovimientos.GetController: IHistoricoMovimientosController;
begin
  Result := FController;
end;

function TfEditorHistoricoMovimientos.GetHistoricoMovimientos: IBizHistoricoMovimientos;
begin
  Result := FHistoricoMovimientos;
end;

function TfEditorHistoricoMovimientos.GetMultiSelect: Boolean;
begin
  Result := ViewGrid.MultiSelect;
end;

procedure TfEditorHistoricoMovimientos.ImprimirInterno;
begin
  inherited;
end;

procedure TfEditorHistoricoMovimientos.NuevoInterno;
begin
//
end;

procedure TfEditorHistoricoMovimientos.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Histórico de movimientos de artículos en almacén - ' + AppFactuGES.EmpresaActiva.NOMBRE;
  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorHistoricoMovimientos.PrevisualizarInterno;
begin
  inherited;
end;

function TfEditorHistoricoMovimientos.SeleccionarAlmacen(Descripcion: String): Integer;
var
  AAlmacenes : IBizAlmacen;
  Respuesta : integer;
begin
  Result := -1;

  JsElegirAlmacenDialog.Instruction.Text := Descripcion;
  with JsElegirAlmacenDialog.RadioButtons do
  begin
    Clear;
    AAlmacenes := (ViewGrid as IViewHistoricoMovimientos).Almacenes;
    AAlmacenes.First;
    while not AAlmacenes.EOF do
    begin
      with Add do
      begin
        Caption := AAlmacenes.NOMBRE;
        Value := 1000 + AAlmacenes.ID;
      end;
        //Asi sabemos que solo va a intentar chequear el primero si hemos añadido al menos un item
      Items[0].Checked := True;
      AAlmacenes.Next;
    end;
  end;

  //Sacar la pantalla de selección y devolver el almacén seleccionado.
  Respuesta := JsElegirAlmacenDialog.Execute;
  if Respuesta <> IDCANCEL then
     Result := JsElegirAlmacenDialog.RadioResult - 1000;
end;

procedure TfEditorHistoricoMovimientos.SetController(const Value: IHistoricoMovimientosController);
begin
  FController := Value;

  if Assigned(FController) then
  begin
    if Assigned(ViewGrid) then
      (ViewGrid as IViewHistoricoMovimientos).Almacenes := FController.AlmacenesController.BuscarTodos;
  end;
end;

procedure TfEditorHistoricoMovimientos.SetHistoricoMovimientos(const Value: IBizHistoricoMovimientos);
begin
  FHistoricoMovimientos := Value;
  dsDataTable.DataTable := FHistoricoMovimientos.DataTable;

  if Assigned(ViewGrid) then
    (ViewGrid as IViewHistoricoMovimientos).HistoricoMovimientos := FHistoricoMovimientos;
end;

procedure TfEditorHistoricoMovimientos.SetMultiSelect(AValue: Boolean);
begin
  ViewGrid.MultiSelect := AValue;
end;

procedure TfEditorHistoricoMovimientos.actContraerExecute(Sender: TObject);
begin
  if Assigned(ViewGrid) then
    ViewGrid.ContraerTodo;
end;

procedure TfEditorHistoricoMovimientos.actExpandirExecute(Sender: TObject);
begin
  if Assigned(ViewGrid) then
    ViewGrid.ExpandirTodo;
end;

end.

  