unit uEditorDetallesSinAlbaran;

interface

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

type

  TfEditorDetallesSinAlbaran = class(TfEditorGridBase, IEditorDetallesSinAlbaran)
    TBXSeparatorItem17: TTBXSeparatorItem;
    actExpandir: TAction;
    actContraer: TAction;
    frViewDetallesSinAlbaran1: TfrViewDetallesSinAlbaran;
    TBXItem38: TTBXItem;
    actAlbaranar: TAction;
    JvNavPanelHeader1: TJvNavPanelHeader;

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

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

  protected
    FDetalles: IBizDetalleSinAlbaran;
    FController : IInventarioController;

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

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

    procedure ImprimirInterno; override;
    procedure PrevisualizarInterno; override;

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

//    property ArticulosSeleccionados: IBizDetallesSinAlbaran 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, uBizAlbaranesCliente, uGenerarAlbaranesCliUtils;

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


{ TfEditorDetallesSinAlbaran }

{
***************************** TfEditorDetallesSinAlbaran *****************************
}
procedure TfEditorDetallesSinAlbaran.actAlbaranarExecute(Sender: TObject);
var
  ArticulosSeleccionados: IBizDetalleSinAlbaran;
  AlbaranesCliente: IBizAlbaranCliente;

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

    if (ArticulosSeleccionados.DataTable.RecordCount > 0) then
    begin
      GenerarAlbaranesCli(ArticulosSeleccionados, AlbaranesCliente, Almacen);
      RefrescarInterno;
    end
    else
      ShowWarningMessage('Debe seleccionar los artículos que desea albaranar');
  finally
    ArticulosSeleccionados:= Nil;
    AlbaranesCliente:= Nil;
  end;
end;

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

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

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

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

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

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

function TfEditorDetallesSinAlbaran.GetController: IDetallesSinAlbaranController;
begin
  Result := FController;
end;
}
{
function TfEditorDetallesSinAlbaran.GetArticulo: IBizInventario;
begin
  Result := FArticulo;
end;
}

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

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

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

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

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

  if Assigned(FController) then
  begin
    if Assigned(ViewGrid) then
      (ViewGrid as IViewDetallesSinAlbaran).Almacenes := FController.AlmacenesController.BuscarTodos;
  end;
end;
}
{
procedure TfEditorDetallesSinAlbaran.SetArticulo(const Value: IBizInventario);
begin
  FArticulo := Value;
  if Assigned(FArticulo) then
  begin
    tbxEditFiltro.Text := FArticulo.REFERENCIA;
  end;
end;
}
procedure TfEditorDetallesSinAlbaran.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 TfEditorDetallesSinAlbaran.SetController(const Value: IInventarioController);
begin
  FController := Value;
end;

procedure TfEditorDetallesSinAlbaran.SetDetalles(const Value: IBizDetalleSinAlbaran);
begin
  FDetalles := Value;
  dsDataTable.DataTable := FDetalles.DataTable;

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

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


