unit uHistoricoMovimientosController;

interface


uses
  Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, 
  uIDataModuleHistoricoMovimientos, uBizHistoricoMovimientos, uAlmacenesController;

type
  IHistoricoMovimientosController = interface(IControllerBase)
  ['{F60D83E3-DDAA-497F-8193-62F9D693B4B0}']
    procedure VerTodos(AHistoricoMovimientos: IBizHistoricoMovimientos);
    function BuscarTodos: IBizHistoricoMovimientos;
    function Buscar(const ID_ALMACEN: Integer): IBizHistoricoMovimientos;
//    function ExtraerSeleccionados(AArticulos: IBizHistoricoMovimientos) : IBizHistoricoMovimientos;

//    procedure Anadir(AArticulos, AHistoricoMovimientos : IBizHistoricoMovimientos);
//    function Ver(AArticulos: IBizHistoricoMovimientos; AHistoricoMovimientos : IBizHistoricoMovimientos): Boolean;
//    function Guardar(AArticulos : IBizHistoricoMovimientos; const FechaMovimiento: TDateTime; const CausaMovimiento: String): Boolean;

    function GetAlmacenesController: IAlmacenesController;
    procedure SetAlmacenesController(const Value: IAlmacenesController);
    property AlmacenesController: IAlmacenesController read GetAlmacenesController write SetAlmacenesController;
  end;

  THistoricoMovimientosController = class(TControllerBase, IHistoricoMovimientosController)
  private
    FAlmacenesController: IAlmacenesController;
    function GetAlmacenesController: IAlmacenesController;
    procedure SetAlmacenesController(const Value: IAlmacenesController);

  protected
    FDataModule : IDataModuleHistoricoMovimientos;

    procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
    function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
    function _Vacio : IBizHistoricoMovimientos;

    procedure FiltrarEmpresa(AHistoricoMovimientos: IBizHistoricoMovimientos);

    //Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de
    //este controller
    procedure AsignarDataModule; virtual;

  public
    property AlmacenesController: IAlmacenesController read GetAlmacenesController write SetAlmacenesController;
    constructor Create; override;
    destructor Destroy; override;

    function Buscar(const ID_ALMACEN: Integer): IBizHistoricoMovimientos;
    function BuscarTodos: IBizHistoricoMovimientos;
//    function ExtraerSeleccionados(AArticulos: IBizHistoricoMovimientos) : IBizHistoricoMovimientos;
//    function Ver(AArticulos: IBizHistoricoMovimientos; AHistoricoMovimientos : IBizHistoricoMovimientos): Boolean;
    procedure VerTodos(AHistoricoMovimientos: IBizHistoricoMovimientos);
  end;

implementation

uses
  Forms, cxControls, DB, schHistoricoMovimientosClient_Intf, uEditorRegistryUtils,
  uIEditorHistoricoMovimientos, uDataModuleHistoricoMovimientos,
  uDataModuleUsuarios, uDAInterfaces, uDataTableUtils,
  uDateUtils, uROTypes, DateUtils, Controls, Windows, uFactuGES_App,
  dialogs, Variants, uBizAlmacenes, uControllerDetallesBase, uDialogUtils,
  schArticulosClient_Intf;

{ THistoricoMovimientosController }

procedure THistoricoMovimientosController.AsignarDataModule;
begin
  FDataModule := TDataModuleHistoricoMovimientos.Create(Nil);
end;

function THistoricoMovimientosController.Buscar(const ID_ALMACEN: Integer): IBizHistoricoMovimientos;
begin
  Result := (FDataModule as IDataModuleHistoricoMovimientos).GetItems(ID_ALMACEN);
  FiltrarEmpresa(Result);
end;

function THistoricoMovimientosController.BuscarTodos: IBizHistoricoMovimientos;
begin
  Result := FDataModule.GetItems;
  FiltrarEmpresa(Result);
end;

constructor THistoricoMovimientosController.Create;
begin
  inherited;
  AsignarDataModule;
  FAlmacenesController := TAlmacenesController.Create;
end;

function THistoricoMovimientosController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean;
begin
  Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;

destructor THistoricoMovimientosController.Destroy;
begin
  FDataModule := Nil;
  FAlmacenesController := Nil;
  inherited;
end;


{function THistoricoMovimientosController.ExtraerSeleccionados(AArticulos: IBizHistoricoMovimientos): IBizHistoricoMovimientos;
var
  ASeleccionados : IBizHistoricoMovimientos;
begin
  ASeleccionados := (Self.Buscar(ID_NULO) as IBizHistoricoMovimientos);
  CopyDataTableDA5(AArticulos.DataTable, ASeleccionados.DataTable, True);
  Result := ASeleccionados;
end;}


{function THistoricoMovimientosController.Ver(AArticulos: IBizHistoricoMovimientos; AHistoricoMovimientos: IBizHistoricoMovimientos): Boolean;
var
  AEditor : IEditorEntradaSalidaArticulos;
begin
  Result := False;
  AEditor := NIL;

  CreateEditor('EditorEntradaSalidaArticulos', IEditorEntradaSalidaArticulos, AEditor);
  if Assigned(AEditor) then
    try
       AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE
       AEditor.Articulos := AArticulos;
       AEditor.HistoricoMovimientos := AHistoricoMovimientos;
       AEditor.ShowModal;
       Result := AEditor.ResultadoModalOK;
    finally
       AEditor.Release;
       AEditor := NIL;
    end;
end;}

procedure THistoricoMovimientosController.VerTodos(AHistoricoMovimientos: IBizHistoricoMovimientos);
var
  AEditor : IEditorHistoricoMovimientos;
begin
  AEditor := NIL;

  CreateEditor('EditorHistoricoMovimientos', IEditorHistoricoMovimientos, AEditor);
  if Assigned(AEditor) then
     with AEditor do
     begin
       Controller := Self; //OJO ORDEN MUY IMPORTANTE
       HistoricoMovimientos := AHistoricoMovimientos;
       MultiSelect := False;
       ShowEmbedded;
     end;
end;

function THistoricoMovimientosController._Vacio: IBizHistoricoMovimientos;
begin
  Result := Buscar(ID_NULO);
end;

procedure THistoricoMovimientosController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
begin
  inherited;
//
end;

procedure THistoricoMovimientosController.SetAlmacenesController(const Value: IAlmacenesController);
begin
  FAlmacenesController := Value;
end;

procedure THistoricoMovimientosController.FiltrarEmpresa(AHistoricoMovimientos: IBizHistoricoMovimientos);
var
  Condicion: TDAWhereExpression;
begin
  if AHistoricoMovimientos.DataTable.Active then
    AHistoricoMovimientos.DataTable.Active := False;

  // Filtrar los HistoricoMovimientos actuales por empresa
  with AHistoricoMovimientos.DataTable.DynamicWhere do
  begin
    // (ID_EMPRESA >= ID)
    Condicion := NewBinaryExpression(NewField('', fld_HistoricoMovimientosID_EMPRESA), NewConstant(AppFactuGES.EmpresaActiva.ID, datInteger), dboEqual);

    if IsEmpty then
       Expression := Condicion
    else
       Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
  end;
end;


function THistoricoMovimientosController.GetAlmacenesController: IAlmacenesController;
begin
  Result := FAlmacenesController;
end;

end.
