unit uEditorPerfilesUsuario;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorGridBase, Menus, JvAppStorage, JvAppRegistryStorage, DB,
  uDAInterfaces, uDADataTable, JvComponentBase, JvFormPlacement, ImgList,
  PngImageList, StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, SpTBXItem,
  TB2ExtItems,  TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls,
  JvExControls, JvNavigationPane, uIEditorPerfilesUsuario,
  uUsuariosController,  uBizUsuarios, uViewPerfilesUsuario, StdCtrls,
  TntStdCtrls, SpTBXEditors;

type
  TfEditorPerfilesUsuario = class(TfEditorGridBase, IEditorPerfilesUsuario)
  private
    FPerfiles : IBizPerfilUsuario;
    FController : IUsuariosController;
  protected
    function GetController : IUsuariosController;
    procedure SetController (const Value : IUsuariosController);

    function GetPerfilesUsuario: IBizPerfilUsuario;
    procedure SetPerfilesUsuario(const Value: IBizPerfilUsuario);

    procedure NuevoInterno; override;
    procedure EliminarInterno; override;
    procedure ModificarInterno; override;

    //Si queremos crear otra vista para el editor heredado solo tendriamos que
    //sobreescribir este metodo
    procedure AsignarVista; virtual;
  public
    procedure PonerTitulos(const ATitulo: string = ''); override;
    property PerfilesUsuario: IBizPerfilUsuario read GetPerfilesUsuario write SetPerfilesUsuario;
    property Controller : IUsuariosController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

{$R *.dfm}

uses
  uDialogUtils;

{ TfEditorUsuarios }

procedure TfEditorPerfilesUsuario.AsignarVista;
begin
  ViewGrid := CreateView(TfrViewPerfilesUsuario) as IViewPerfilesUsuario;
end;

constructor TfEditorPerfilesUsuario.Create(AOwner: TComponent);
begin
  inherited;
  AsignarVista;
end;

destructor TfEditorPerfilesUsuario.Destroy;
begin
  FPerfiles := NIL;
  FController := NIl;

  inherited;
end;

procedure TfEditorPerfilesUsuario.EliminarInterno;
begin
  if (ShowConfirmMessage('Eliminar un perfil', Format('¿Desea eliminar el perfil %s?', [FPerfiles.USERNAME])) = IDYES) then
  begin
    inherited;
    //Para que en el caso de no poderse realizar la operación se refresquen
    //los datos y no nos permita eliminar un registro a la segunda
    FController.EliminarPerfil(FPerfiles);
    actRefrescar.Execute;
  end;
end;

function TfEditorPerfilesUsuario.GetController: IUsuariosController;
begin
  Result := FController;
end;

function TfEditorPerfilesUsuario.GetPerfilesUsuario: IBizPerfilUsuario;
begin
  Result := FPerfiles;
end;

procedure TfEditorPerfilesUsuario.ModificarInterno;
begin
  inherited;
  FController.VerPerfil(FPerfiles.ID);
  actRefrescar.Execute;
end;

procedure TfEditorPerfilesUsuario.NuevoInterno;
var
  ANuevoPerfil : IBizPerfilUsuario;
begin
  inherited;
  ANuevoPerfil := FController.NuevoPerfil;
  FController.VerPerfil(ANuevoPerfil);
  actRefrescar.Execute;  
end;

procedure TfEditorPerfilesUsuario.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Lista de perfiles de usuario';
  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorPerfilesUsuario.SetController(const Value: IUsuariosController);
begin
  FController := Value;
end;

procedure TfEditorPerfilesUsuario.SetPerfilesUsuario(
  const Value: IBizPerfilUsuario);
begin
  FPerfiles := Value;
  dsDataTable.DataTable := FPerfiles.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewPerfilesUsuario).PerfilesUsuario := FPerfiles;
end;

end.
