unit uClientesController;

interface

uses
  uCustomEditor,
  uContactosController, uBizContactos,
  uIEditorClientes, uIEditorCliente, uIDataModuleContactos, uIDataModuleClientes;

type
  IClientesController = interface(IContactosController)
  end;

  TClientesController = class(TContactosController, IClientesController)
  public
    constructor Create; override;

    function Buscar(const ID: Integer): IBizContacto; override;
    function BuscarTodos: IBizContacto; override;
    function Nuevo : IBizContacto; override;
    procedure Ver(AContacto : IBizContacto); override;
    procedure VerTodos(AContactos: IBizContacto); override;
    function ElegirContacto(AContactos : IBizContacto;
      AMensaje: String; AMultiSelect: Boolean): IBizContacto; override;
  end;

implementation

uses
  SysUtils, Controls, cxControls, Dialogs, uDataModuleClientes, uEditorRegistryUtils,
  uDataTableUtils, uDADataTable, DB, schContactosClient_Intf,
  uIEditorElegirClientes;

{ TClientesController }

function TClientesController.Buscar(const ID: Integer): IBizContacto;
begin
  Result := (FDataModule as IDataModuleClientes).GetItem(ID);
  FiltrarEmpresa(Result);
end;

function TClientesController.BuscarTodos: IBizContacto;
begin
  Result := (FDataModule as IDataModuleClientes).GetItems;
  FiltrarEmpresa(Result);
end;

constructor TClientesController.Create;
begin
  inherited;
  FDataModule := TDataModuleClientes.Create(Nil);
end;

function TClientesController.ElegirContacto(AContactos : IBizContacto;
  AMensaje: String; AMultiSelect: Boolean): IBizContacto;
var
  AEditor : IEditorElegirClientes;
begin
  Result := NIL;

  CreateEditor('EditorElegirClientes', IEditorElegirClientes, AEditor);
  try
    with AEditor do
    begin
      Contactos := AContactos;
      Controller := Self;
      MultiSelect := AMultiSelect;
      Mensaje := AMensaje;
      if IsPositiveResult(ShowModal) then
        Result := ContactosSeleccionados;
    end;
  finally
    AEditor := NIL;
  end;
end;

function TClientesController.Nuevo: IBizContacto;
var
  AContacto : IBizCliente;
begin
  AContacto := (FDataModule as IDataModuleClientes).NewItem;
  FiltrarEmpresa(AContacto);
  AContacto.DataTable.Active := True;
  AContacto.Insert;
  Result := AContacto;
end;

procedure TClientesController.Ver(AContacto: IBizContacto);
var
  AEditor : IEditorCliente;
begin
  CreateEditor('EditorCliente', IEditorCliente, AEditor);
  with AEditor do
  begin
    Contacto := AContacto;
    Controller := Self;
    ShowModal;
  end;
end;

procedure TClientesController.VerTodos(AContactos: IBizContacto);
var
  AEditor : IEditorClientes;
begin
  CreateEditor('EditorClientes', IEditorClientes, AEditor);
  with AEditor do
  begin
    Contactos := AContactos;
    Controller := Self;
    ShowEmbedded;
  end;
end;

end.
