unit uInfVentasArticuloController;

interface


uses
  Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
  uBizInfVentasArticulo, uIDataModuleInfVentasArticulo, uInformeBaseController,
  uBizInformes;

type
  IInfVentasArticuloController = interface(IInformeBaseController)
  ['{29069391-E477-41E2-9843-DE09DAE5B2EE}']
//    procedure VerTodos(AInfVentasArticulo: IBizInfVentasArticulo);
//    function BuscarTodos: IBizInfVentasArticulo;
//    function Buscar(const ID_ALMACEN: Integer): IBizInfVentasArticulo;
//    function ExtraerSeleccionados(AArticulos: IBizInfVentasArticulo) : IBizInfVentasArticulo;

//    procedure Anadir(AArticulos, AInfVentasArticulo : IBizInfVentasArticulo);
//    procedure Ver; //(AInfVentasArticulo : IBizInfVentasArticulo);
//    function Guardar(AArticulos : IBizInfVentasArticulo; const FechaMovimiento: TDateTime; const CausaMovimiento: String): Boolean;
  end;

  TInfVentasArticuloController = class(TObservador, IInfVentasArticuloController, IInformeBaseController)
  private
    function BuscarTodos: IBizInfVentasArticulo;

  protected
    FDataModule : IDataModuleInfVentasArticulo;

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

    procedure FiltrarEmpresa(AInfVentasArticulo: IBizInfVentasArticulo);

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

  public
    constructor Create; virtual;
    destructor Destroy; override;

//    function Buscar(const ID_ALMACEN: Integer): IBizInfVentasArticulo;
//    function ExtraerSeleccionados(AArticulos: IBizInfVentasArticulo) : IBizInfVentasArticulo;
//    function Ver(AArticulos: IBizInfVentasArticulo; AInfVentasArticulo : IBizInfVentasArticulo): Boolean;
    procedure Nuevo(AInforme : IBizInforme);
    procedure Ver(AInforme : IBizInforme);
//    procedure VerTodos(AInfVentasArticulo: IBizInfVentasArticulo);
  end;

implementation

uses
  Forms, cxControls, DB, uEditorRegistryUtils,
  uIEditorInfVentasArticulo, uDataModuleUsuarios,
  uDataModuleInfVentasArticulo,
  uDAInterfaces, uDataTableUtils,
  uDateUtils, uROTypes, DateUtils, Controls, Windows,
  dialogs, Variants, uControllerDetallesBase, uDialogUtils,
  schInfVentasArticuloClient_Intf;

{ TInfVentasArticuloController }

procedure TInfVentasArticuloController.AsignarDataModule;
begin
  FDataModule := TdmInfVentasArticulo.Create(Nil);
end;

{
function TInfVentasArticuloController.Buscar(const ID_ALMACEN: Integer): IBizInfVentasArticulo;
begin
  Result := (FDataModule as IDataModuleInfVentasArticulo).GetItems(ID_ALMACEN);
  FiltrarEmpresa(Result);
end;
}

function TInfVentasArticuloController.BuscarTodos: IBizInfVentasArticulo;
begin
  Result := FDataModule.GetItems;
  FiltrarEmpresa(Result);
end;

constructor TInfVentasArticuloController.Create;
begin
  AsignarDataModule;
end;

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

destructor TInfVentasArticuloController.Destroy;
begin
  FDataModule := Nil;
  inherited;
end;


{function TInfVentasArticuloController.ExtraerSeleccionados(AArticulos: IBizInfVentasArticulo): IBizInfVentasArticulo;
var
  ASeleccionados : IBizInfVentasArticulo;
begin
  ASeleccionados := (Self.Buscar(ID_NULO) as IBizInfVentasArticulo);
  CopyDataTable(AArticulos.DataTable, ASeleccionados.DataTable, True);
  Result := ASeleccionados;
end;}


{function TInfVentasArticuloController.Ver(AArticulos: IBizInfVentasArticulo; AInfVentasArticulo: IBizInfVentasArticulo): Boolean;
var
  AEditor : IEditorEntradaSalidaArticulos;
begin
  Result := False;
  AEditor := NIL;
  ShowHourglassCursor;
  try
    CreateEditor('EditorEntradaSalidaArticulos', IEditorEntradaSalidaArticulos, AEditor);
    with AEditor do
    begin
      Controller := Self; //OJO ORDEN MUY IMPORTANTE
      Articulos := AArticulos;
      InfVentasArticulo := AInfVentasArticulo;
    end;
  finally
    HideHourglassCursor;
  end;

  if Assigned(AEditor) then
    try
      AEditor.ShowModal;
      Result := AEditor.ResultadoModalOK;
      AEditor.Release;
    finally
      AEditor := NIL;
    end;
end;}

procedure TInfVentasArticuloController.Ver(AInforme: IBizInforme);
var
  AEditor : IEditorInfVentasArticulo;
begin
  AEditor := NIL;
  ShowHourglassCursor;
  try
    CreateEditor('EditorInfVentasArticulo', IEditorInfVentasArticulo, AEditor);
    with (AEditor as IEditorInfVentasArticulo) do
    begin
      if not Assigned(FDataModule) then
         AsignarDataModule;
      Controller := Self; //OJO ORDEN MUY IMPORTANTE
      Datos := BuscarTodos;
      Informe := AInforme;


//      Datos.VisibleColumns := FDataModule.GetNameColumns;
    end;
  finally
    HideHourglassCursor;
  end;

  if Assigned(AEditor) then
    try
      AEditor.ShowModal;
      AEditor.Release;
    finally
      AEditor := NIL;
    end;
end;

{procedure TInfVentasArticuloController.VerTodos(AInfVentasArticulo: IBizInfVentasArticulo);
//var
//  AEditor : IEditorInfVentasArticulo;
begin
{  AEditor := NIL;
  ShowHourglassCursor;
  try
    CreateEditor('EditorInfVentasArticulo', IEditorInfVentasArticulo, AEditor);
    with AEditor do
    begin
      Controller := Self; //OJO ORDEN MUY IMPORTANTE
      InfVentasArticulo := AInfVentasArticulo;
      MultiSelect := False;
    end;
  finally
    HideHourglassCursor;
  end;

  if Assigned(AEditor) then
    AEditor.ShowEmbedded;

end;}

function TInfVentasArticuloController._Vacio: IBizInfVentasArticulo;
begin
//  Result := Buscar(ID_NULO);
end;

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

procedure TInfVentasArticuloController.FiltrarEmpresa(AInfVentasArticulo: IBizInfVentasArticulo);
begin
  if AInfVentasArticulo.DataTable.Active then
    AInfVentasArticulo.DataTable.Active := False;

  // Filtrar los InfVentasArticulo actuales por empresa
  with AInfVentasArticulo.DataTable.Where do
  begin
    if NotEmpty then
      AddOperator(opAND);

    OpenBraket;
    AddText(fld_InfVentasArticuloID_EMPRESA + ' = ' + IntToStr(dmUsuarios.IDEmpresaActual));
    CloseBraket;
  end;
end;

procedure TInfVentasArticuloController.Nuevo(AInforme: IBizInforme);
begin
  AInforme.Insert;
  AInforme.CATEGORIA := 'VENTAS ARTICULOS';
  AInforme.CONTROLLER := 'InfVentasArticuloController';
  AInforme.ID_EMPRESA := dmUsuarios.EmpresaActual.ID;
end;

end.
