unit uEditorElegirArticulos;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, uDADataTable, Menus, JvAppStorage, JvAppRegistryStorage,
  JvComponentBase, JvFormPlacement, ImgList, PngImageList, StdActns,
  ActnList, uCustomView, uViewBase, uViewGridBase, uViewGrid,
  uViewArticulos, ComCtrls, TB2ExtItems, TBXExtItems, TBX,
  TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvComponent,
  JvNavigationPane, uViewBarraSeleccion, StdCtrls,
  uEditorArticulos, uBizArticulos, uIEditorElegirArticulos,
  JvExComCtrls, JvStatusBar, uDAInterfaces, uEditorGridBase, uArticulosController;

type
  TfEditorElegirArticulos = class(TfEditorGridBase, IEditorElegirArticulos)
    frViewBarraSeleccion1: TfrViewBarraSeleccion;
    lblTitle: TLabel;
    lblComments: TLabel;
    EditorSeleccionActionList: TActionList;
    actBuscar2: TAction;
    actQuitarFiltro2: TAction;
    actAnchoAuto2: TAction;
    pnlHeader: TPanel;
    procedure frViewBarraSeleccion1actSeleccionarUpdate(Sender: TObject);
    procedure frViewBarraSeleccion1actCancelarExecute(Sender: TObject);
    procedure frViewBarraSeleccion1actSeleccionarExecute(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure actAnchoAuto2Execute(Sender: TObject);
    procedure actQuitarFiltro2Execute(Sender: TObject);

  private
    FArticulos: IBizArticulo;
    FController : IArticulosController;

  protected
    function GetArticulos: IBizArticulo;
    procedure SetArticulos(const Value: IBizArticulo);
    function GetController : IArticulosController; virtual;
    procedure SetController (const Value : IArticulosController); virtual;

    procedure SetMultiSelect (AValue : Boolean);
    function GetMultiSelect : Boolean;
    function GetArticulosSeleccionados: IBizArticulo;
    procedure SetViewGrid(const Value: IViewGridBase); override;
    procedure SetMensaje (const AValue: String);
    function GetMensaje: String;

    procedure NuevoInterno; override;
    procedure ModificarInterno; override;

  public
    property Mensaje : String read GetMensaje write SetMensaje;
    property ArticulosSeleccionados: IBizArticulo read GetArticulosSeleccionados;
    property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect;
    property Articulos: IBizArticulo read GetArticulos write SetArticulos;
    property Controller : IArticulosController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

uses
  cxGridCustomTableView, uIntegerListUtils, uDBSelectionListUtils,
  uGridStatusUtils, uEditorBase;

{$R *.dfm}

{ TfEditorElegirArticulos }

procedure TfEditorElegirArticulos.actAnchoAuto2Execute(Sender: TObject);
begin
  inherited;
  actAnchoAuto.Execute;
end;

procedure TfEditorElegirArticulos.actQuitarFiltro2Execute(Sender: TObject);
begin
  inherited;
  actQuitarFiltro.Execute;
end;

constructor TfEditorElegirArticulos.Create(AOwner: TComponent);
begin
  inherited;
end;

destructor TfEditorElegirArticulos.Destroy;
begin
  FArticulos := NIL;
  FController := NIl;  
  inherited;
end;

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

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

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

  Articulos.DataTable.Active := True;
//  EditorActionList.State := asSuspended;
end;

procedure TfEditorElegirArticulos.frViewBarraSeleccion1actCancelarExecute(
  Sender: TObject);
begin
  inherited;
  Close;
end;

procedure TfEditorElegirArticulos.frViewBarraSeleccion1actSeleccionarExecute(
  Sender: TObject);
begin
  inherited;
  ModalResult := mrOk;
end;

procedure TfEditorElegirArticulos.frViewBarraSeleccion1actSeleccionarUpdate(
  Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := (ViewGrid._FocusedView.Controller.SelectedRowCount > 0)
end;

function TfEditorElegirArticulos.GetArticulos: IBizArticulo;
begin
  Result := FArticulos;
end;

function TfEditorElegirArticulos.GetArticulosSeleccionados: IBizArticulo;
begin
  SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Articulos as ISeleccionable).SelectedRecords);
  // En SelectedRecords tengo los ID de las filas seleccionadas del grid
  Result := (Controller as IArticulosController).ExtraerSeleccionados(Articulos) as IBizArticulo;
end;

function TfEditorElegirArticulos.GetController: IArticulosController;
begin
  Result := FController;
end;

function TfEditorElegirArticulos.GetMensaje: String;
begin
  Result := lblComments.Caption;
end;

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

procedure TfEditorElegirArticulos.ModificarInterno;
var
  AArticulo: IBizArticulo;

begin
  inherited;
  AArticulo := FController.Buscar(Articulos.ID);
  FController.Ver(AArticulo);
  RefrescarInterno;
end;

procedure TfEditorElegirArticulos.NuevoInterno;
var
  AArticulo: IBizArticulo;

begin
  inherited;
  AArticulo := FController.Nuevo;
  if not AArticulo.DataTable.Active then
     AArticulo.DataTable.Active := True;

  FController.Ver(AArticulo);
  RefrescarInterno;  
end;

procedure TfEditorElegirArticulos.SetArticulos(const Value: IBizArticulo);
begin
  FArticulos := Value;
  dsDataTable.DataTable := FArticulos.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewArticulos).Articulos := FArticulos;
end;

procedure TfEditorElegirArticulos.SetController(const Value: IArticulosController);
begin
  FController := Value;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewArticulos).Controller := FController;
end;

procedure TfEditorElegirArticulos.SetMensaje(const AValue: String);
begin
  lblComments.Caption := AValue;
end;

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

procedure TfEditorElegirArticulos.SetViewGrid(const Value: IViewGridBase);
begin
  inherited;
  ViewGrid.OnDblClick := frViewBarraSeleccion1.actSeleccionar.OnExecute;
end;

end.
