unit uEditorDetallesSinRecibir;

interface

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

type

  TfEditorDetallesSinRecibir = class(TfEditorGridBase, IEditorDetallesSinRecibir)
    TBXSeparatorItem17: TTBXSeparatorItem;
    actExpandir: TAction;
    actContraer: TAction;
    frViewDetallesSinRecibir1: TfrViewDetallesSinRecibir;
    TBXItem38: TTBXItem;
    actRecibir: TAction;
    JvNavPanelHeader1: TJvNavPanelHeader;

    procedure FormShow(Sender: TObject);
    procedure actRecibirExecute(Sender: TObject);

  private
    FAlmacen: IBizAlmacen;
    function GetAlmacen: Integer;
    procedure SetAlmacen(const Value: Integer);

  protected
//    FArticulo: IBizInventario;
    FDetalles: IBizDetalleSinRecibir;
    FController : IInventarioController;

//    function GetArticulo: IBizInventario;
//    procedure SetArticulo(const Value: IBizInventario);
    function GetDetalles: IBizDetalleSinRecibir;
    procedure SetDetalles(const Value: IBizDetalleSinRecibir);

{    procedure SetMultiSelect (AValue : Boolean);
    function GetMultiSelect : Boolean;
    function GetArticulosSeleccionados: IBizDetallesSinRecibir;
}
    function GetController : IInventarioController;
    procedure SetController (const Value : IInventarioController);

    procedure ImprimirInterno; override;
    procedure PrevisualizarInterno; override;

  public
    property Almacen: Integer read GetAlmacen write SetAlmacen;
    property DetallesSinRecibir: IBizDetalleSinRecibir read GetDetalles write SetDetalles;
    property Controller : IInventarioController read GetController write SetController;

//    property ArticulosSeleccionados: IBizDetallesSinRecibir 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, uDataModuleInventario, uDataModuleUsuarios,
  uEditorBase, uDBSelectionListUtils, cxGridDBTableView, cxGridCustomTableView,
  uAlmacenesController, uGenerarAlbaranesProvUtils,
  schInventarioClient_Intf, uDialogUtils, uBizAlbaranesProveedor;

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


{ TfEditorDetallesSinRecibir }

{
***************************** TfEditorDetallesSinRecibir *****************************
}
procedure TfEditorDetallesSinRecibir.actRecibirExecute(Sender: TObject);
var
  ArticulosSeleccionados: IBizDetalleSinRecibir;
  AlbaranesProveedor: IBizAlbaranProveedor;

begin
  inherited;
  try
    SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (DetallesSinRecibir as ISeleccionable).SelectedRecords);
    // En SelectedRecords tengo los ID de las filas seleccionadas del grid
    ArticulosSeleccionados := (Controller as IInventarioController).ExtraerSeleccionados(DetallesSinRecibir) as IBizDetalleSinRecibir;

    if (ArticulosSeleccionados.DataTable.RecordCount > 0) then
    begin
      GenerarAlbaranesProv(ArticulosSeleccionados, AlbaranesProveedor, Almacen);
      RefrescarInterno;
    end
    else
      ShowWarningMessage('Debe seleccionar los artículos que desea recibir');

  finally
    ArticulosSeleccionados:= Nil;
    AlbaranesProveedor:= Nil;
  end;
end;

constructor TfEditorDetallesSinRecibir.Create(AOwner: TComponent);
begin
  inherited;
  FAlmacen := Nil;
  ViewGrid := frViewDetallesSinRecibir1;
end;

{
function TfEditorDetallesSinRecibir.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 TfEditorDetallesSinRecibir.Destroy;
begin
  FDetalles := NIL;
  FAlmacen := NIL;
  inherited;
end;

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

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

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

  DetallesSinRecibir.DataTable.Active := True;
  ViewGrid.GotoFirst;
end;
{
function TfEditorDetallesSinRecibir.GetArticulosSeleccionados: IBizDetallesSinRecibir;
begin
  SeleccionarFilasDesdeGrid((ViewGrid as IViewDetallesSinRecibir)._FocusedView, (DetallesSinRecibir as ISeleccionable).SelectedRecords);
  // En Presupuestos.SelectedRecords tengo los ID de las filas seleccionadas del grid
  Result := Controller.ExtraerSeleccionados(DetallesSinRecibir);
end;

function TfEditorDetallesSinRecibir.GetController: IDetallesSinRecibirController;
begin
  Result := FController;
end;
}
{
function TfEditorDetallesSinRecibir.GetArticulo: IBizInventario;
begin
  Result := FArticulo;
end;
}

function TfEditorDetallesSinRecibir.GetAlmacen: Integer;
begin
  if Assigned(FAlmacen) then
     Result := FAlmacen.ID
  else
     Result := -1;
end;

function TfEditorDetallesSinRecibir.GetController: IInventarioController;
begin
  Result := FController;
end;

function TfEditorDetallesSinRecibir.GetDetalles: IBizDetalleSinRecibir;
begin
  Result := FDetalles;
end;
{
function TfEditorDetallesSinRecibir.GetMultiSelect: Boolean;
begin
  Result := ViewGrid.MultiSelect;
end;
}
procedure TfEditorDetallesSinRecibir.ImprimirInterno;
begin
  inherited;
end;

procedure TfEditorDetallesSinRecibir.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Detalle de artículos sin recibir - ' + dmUsuarios.EmpresaActual.NOMBRE;
  inherited PonerTitulos(FTitulo);
  JvNavPanelHeader1.Caption := 'Almacén de entrada: ' + FAlmacen.NOMBRE;  
end;

procedure TfEditorDetallesSinRecibir.PrevisualizarInterno;
begin
  inherited;
end;
{
function TfEditorDetallesSinRecibir.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 IViewDetallesSinRecibir).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 TfEditorDetallesSinRecibir.SetController(const Value: IDetallesSinRecibirController);
begin
  FController := Value;

  if Assigned(FController) then
  begin
    if Assigned(ViewGrid) then
      (ViewGrid as IViewDetallesSinRecibir).Almacenes := FController.AlmacenesController.BuscarTodos;
  end;
end;
}
{
procedure TfEditorDetallesSinRecibir.SetArticulo(const Value: IBizInventario);
begin
  FArticulo := Value;
  if Assigned(FArticulo) then
  begin
    tbxEditFiltro.Text := FArticulo.REFERENCIA;
  end;
end;
}
procedure TfEditorDetallesSinRecibir.SetAlmacen(const Value: Integer);
var
  AAlmacenesController : IAlmacenesController;
begin
  AAlmacenesController := TAlmacenesController.Create;
  try
    FAlmacen := AAlmacenesController.Buscar(Value);
    FAlmacen.DataTable.Active := True;
  finally
    AAlmacenesController := NIL;
  end;
end;

procedure TfEditorDetallesSinRecibir.SetController(const Value: IInventarioController);
begin
  FController := Value;
end;

procedure TfEditorDetallesSinRecibir.SetDetalles(const Value: IBizDetalleSinRecibir);
begin
  FDetalles := Value;
  dsDataTable.DataTable := FDetalles.DataTable;

  if Assigned(ViewGrid) then
    (ViewGrid as IViewDetalleSinRecibir).Detalles := FDetalles;
end;

{
procedure TfEditorDetallesSinRecibir.SetMultiSelect(AValue: Boolean);
begin
  ViewGrid.MultiSelect := AValue;
end;
}
end.

