unit uEditorPerfilUsuario;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDAInterfaces,
  uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList,
  StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item,
  TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvNavigationPane,
  uIEditorPerfilUsuario, uUsuariosController, uCustomView, uViewBase,
  uViewPerfilUsuario, uBizUsuarios, dxLayoutLookAndFeels;

type
  TfEditorPerfilUsuario = class(TfEditorDBItem, IEditorPerfilUsuario)
    dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
    dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
  private
    FController : IUsuariosController;
    FPerfilUsuario : IBizPerfilUsuario;
    FViewPerfilUsuario : IViewPerfilUsuario;
  protected
    function GetController : IUsuariosController;
    procedure SetController (const Value : IUsuariosController);

    function GetPerfilUsuario: IBizPerfilUsuario;
    procedure SetPerfilUsuario(const Value: IBizPerfilUsuario);

    procedure GuardarInterno; override;
    procedure EliminarInterno; override;

    //Si queremos crear otra vista para el editor heredado solo tendriamos que
    //sobreescribir este metodo
    procedure AsignarVista; virtual;
    procedure PonerTitulos(const ATitulo: string = ''); override;

    function GetViewPerfilUsuario: IViewPerfilUsuario;
    procedure SetViewPerfilUsuario(const Value: IViewPerfilUsuario);
    property ViewPerfilUsuario: IViewPerfilUsuario read GetViewPerfilUsuario write SetViewPerfilUsuario;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Controller : IUsuariosController read GetController write SetController;
    property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario;
  end;


implementation

{$R *.dfm}

{ TfEditorUsuario }

uses
  uDialogUtils;

var
  FIDNuevoGuardado : Integer = -1; 

procedure TfEditorPerfilUsuario.AsignarVista;
var
  AViewPerfilUsuario: TfrViewPerfilUsuario;
begin
  AViewPerfilUsuario := TfrViewPerfilUsuario.Create(Self);
  with AViewPerfilUsuario do
  begin
    Parent := pagGeneral;
    Align := alClient;
    dxLayoutControlArticulo.LookAndFeel := dxLayoutOfficeLookAndFeel1;
  end;
  ViewPerfilUsuario := AViewPerfilUsuario;
end;

constructor TfEditorPerfilUsuario.Create(AOwner: TComponent);
begin
  inherited;
  pgPaginas.ActivePageIndex := 0;
  AsignarVista;
end;

destructor TfEditorPerfilUsuario.Destroy;
begin
  // Utilizar mejor OnClose;
  inherited;
end;

procedure TfEditorPerfilUsuario.EliminarInterno;
begin
  if (ShowConfirmMessage('Eliminar el perfil', '¿Desea eliminar este perfil?') = IDYES) then
  begin
    inherited;
    if not FController.EliminarPerfil(FPerfilUsuario) then
      actRefrescar.Execute;
  end;
end;

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

function TfEditorPerfilUsuario.GetPerfilUsuario: IBizPerfilUsuario;
begin
  Result := FPerfilUsuario;
end;

function TfEditorPerfilUsuario.GetViewPerfilUsuario: IViewPerfilUsuario;
begin
  Result := FViewPerfilUsuario;
end;

procedure TfEditorPerfilUsuario.GuardarInterno;
begin
  inherited;
  if FController.GuardarPerfil(FPerfilUsuario) then
  begin
    FIDNuevoGuardado := FPerfilUsuario.ID;
    FPerfilUsuario.DataTable.CancelUpdates;
    Modified := False;
    actRefrescar.Execute;
  end;
end;

procedure TfEditorPerfilUsuario.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  if Assigned(FPerfilUsuario) then
  begin
    if FPerfilUsuario.EsNuevo then
      FTitulo := 'Nuevo perfil'
    else
      FTitulo := 'Perfil';

    if Length(FPerfilUsuario.USERNAME) > 0 then
      FTitulo := FTitulo + ' - ' + FPerfilUsuario.USERNAME;
  end;

  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorPerfilUsuario.SetController(const Value: IUsuariosController);
begin
  FController := Value;
  if Assigned(FViewPerfilUsuario) and Assigned(FController) then
    FViewPerfilUsuario.Controller := FController;
end;

procedure TfEditorPerfilUsuario.SetPerfilUsuario(
  const Value: IBizPerfilUsuario);
begin
  FPerfilUsuario := Value;
  dsDataTable.DataTable := FPerfilUsuario.DataTable;

  if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then
    FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario;
end;

procedure TfEditorPerfilUsuario.SetViewPerfilUsuario(const Value: IViewPerfilUsuario);
begin
  FViewPerfilUsuario := Value;

  if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then
    FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario;
end;

end.
