unit uEditorUsuarios;

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, TBX,
  TB2ExtItems, TBXExtItems, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls,
  JvExControls, JvNavigationPane, uCustomView, uViewBase, uViewGridBase,
  uViewGrid, uViewUsuarios, uIEditorUsuarios, uUsuariosController,
  uBizUsuarios;

type
  TfEditorUsuarios = class(TfEditorGridBase, IEditorUsuarios)
    actCambiarPassword: TAction;
    TBXSubmenuItem2: TTBXSubmenuItem;
    TBXItem38: TTBXItem;
    TBXItem39: TTBXItem;
    procedure actEliminarUpdate(Sender: TObject);
    procedure actCambiarPasswordUpdate(Sender: TObject);
    procedure actCambiarPasswordExecute(Sender: TObject);
  private
    FUsuarios : IBizUsuario;
    FController : IUsuariosController;
  protected
    function GetController : IUsuariosController;
    procedure SetController (const Value : IUsuariosController);

    function GetUsuarios: IBizUsuario;
    procedure SetUsuarios(const Value: IBizUsuario);

    procedure NuevoInterno; override;
    procedure EliminarInterno; override;
    procedure ModificarInterno; override;
    procedure ImprimirInterno; override;
    procedure PrevisualizarInterno; override;
    procedure DuplicarInterno; 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 Usuarios: IBizUsuario read GetUsuarios write SetUsuarios;
    property Controller : IUsuariosController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

{$R *.dfm}

uses
  uDialogUtils;
  
{ TfEditorUsuarios }

procedure TfEditorUsuarios.actCambiarPasswordExecute(Sender: TObject);
begin
  inherited;
  FController.CambiarPassword(FUsuarios.ID);
end;

procedure TfEditorUsuarios.actCambiarPasswordUpdate(Sender: TObject);
begin
  inherited;
  if (Sender as TAction).Enabled then
     (Sender as TAction).Enabled := HayDatos;
end;

procedure TfEditorUsuarios.actEliminarUpdate(Sender: TObject);
begin
  inherited;
  if (Sender as TAction).Enabled then
     (Sender as TAction).Enabled := (FUsuarios.PRIVILEGED = 0);
end;

procedure TfEditorUsuarios.AsignarVista;
begin
  ViewGrid := CreateView(TfrViewUsuarios) as IViewUsuarios;
end;

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

destructor TfEditorUsuarios.Destroy;
begin
  FUsuarios := NIL;
  FController := NIl;

  inherited;
end;

procedure TfEditorUsuarios.DuplicarInterno;
begin
  inherited;
end;

procedure TfEditorUsuarios.EliminarInterno;
begin
  if (ShowConfirmMessage('Eliminar un usuario', Format('¿Desea borrar el usuario %s?', [FUsuarios.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.EliminarUsuario(FUsuarios.ID);
    actRefrescar.Execute;
  end;
end;

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

function TfEditorUsuarios.GetUsuarios: IBizUsuario;
begin
  Result := FUsuarios;
end;

procedure TfEditorUsuarios.ImprimirInterno;
begin
  inherited;
end;

procedure TfEditorUsuarios.ModificarInterno;
begin
  inherited;
  FController.VerUsuario(FUsuarios.ID);
  actRefrescar.Execute;
end;

procedure TfEditorUsuarios.NuevoInterno;
var
  ANuevoUsuario : IBizUsuario;
begin
  inherited;
  ANuevoUsuario := FController.NuevoUsuario;
  FController.VerUsuario(ANuevoUsuario);
  actRefrescar.Execute;  
end;

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

procedure TfEditorUsuarios.PrevisualizarInterno;
begin
  inherited;

end;

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

procedure TfEditorUsuarios.SetUsuarios(const Value: IBizUsuario);
begin
  FUsuarios := Value;
  dsDataTable.DataTable := FUsuarios.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewUsuarios).Usuarios := FUsuarios;
end;

end.
