210 lines
5.6 KiB
ObjectPascal
210 lines
5.6 KiB
ObjectPascal
unit uDataModuleUsuarios;
|
|
|
|
interface
|
|
|
|
uses {vcl:} SysUtils, Classes, DB, DBClient,
|
|
{RemObjects:} uDAClientDataModule, uDADataTable, uDABINAdapter,
|
|
uROServiceComponent, uRORemoteService, uROClient, uROBinMessage,
|
|
uROWinInetHttpChannel, uDAScriptingProvider, uDACDSDataTable,
|
|
FactuGES_Intf, uIntegerListUtils, uBizEmpresas, uDADataStreamer;
|
|
|
|
const
|
|
PERFIL_ADMINISTRADORES = 'Administradores';
|
|
|
|
type
|
|
TdmUsuarios = class(TDAClientDataModule)
|
|
ROLoginService: TRORemoteService;
|
|
DABINAdapter: TDABINAdapter;
|
|
procedure DAClientDataModuleCreate(Sender: TObject);
|
|
procedure DAClientDataModuleDestroy(Sender: TObject);
|
|
private
|
|
FUsuario : String;
|
|
FPassword : String; // Lo guardo para poder hacer una reconexión
|
|
|
|
FLoginInfo: TRdxLoginInfo;
|
|
FEmpresaActual: IBizEmpresa;
|
|
function CambiarPassword (const APassword : String) : boolean; overload;
|
|
function GetEsAdministrador: Boolean;
|
|
|
|
function GetEmpresas: TIntegerList;
|
|
|
|
procedure SetEmpresaActual(const Value: IBizEmpresa);
|
|
function GetIDEmpresaActual: Integer;
|
|
procedure SetIDEmpresaActual(const Value: Integer);
|
|
public
|
|
function Login: Boolean; overload;
|
|
function Login(Usuario: String; Password: String): Boolean; overload;
|
|
procedure Logout;
|
|
procedure CambiarPassword; overload;
|
|
property EsAdministrador : Boolean read GetEsAdministrador;
|
|
property IDEmpresaActual : Integer read GetIDEmpresaActual write SetIDEmpresaActual;
|
|
property EmpresaActual : IBizEmpresa read FEmpresaActual write SetEmpresaActual;
|
|
property Empresas : TIntegerList read GetEmpresas;
|
|
property LoginInfo: TRdxLoginInfo read FLoginInfo;
|
|
end;
|
|
|
|
var
|
|
dmUsuarios: TdmUsuarios;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
uses
|
|
Forms, Controls, uDataTableUtils, uDataModuleConexion, uLoginForm,
|
|
uCambiarPassword, Dialogs, Windows, uEmpresasController;
|
|
|
|
{ TDAClientDataModule1 }
|
|
|
|
procedure TdmUsuarios.DAClientDataModuleCreate(Sender: TObject);
|
|
begin
|
|
ROLoginService.Channel := dmConexion.Channel;
|
|
ROLoginService.Message := dmConexion.Message;
|
|
FEmpresaActual := nil;
|
|
FUsuario := '';
|
|
FPassword := '';
|
|
FLoginInfo := NIL;
|
|
end;
|
|
|
|
function TdmUsuarios.Login: Boolean;
|
|
begin
|
|
// Intento hacer login si el usuario ya lo había hecho antes
|
|
if (Length(FUsuario) > 0) then
|
|
if Login(FUsuario, FPassword) then
|
|
begin
|
|
Result := True;
|
|
Exit;
|
|
end;
|
|
|
|
// Si no funcionar el login anterior o es la primera vez,
|
|
// saco la pantalla de login
|
|
with TfLoginForm.Create(NIL) do
|
|
try
|
|
if Assigned(FLoginInfo) then
|
|
edtUser.Text := FLoginInfo.Usuario;
|
|
Result := (ShowModal = mrOK)
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
function TdmUsuarios.Login(Usuario: String; Password: String): Boolean;
|
|
begin
|
|
// Libero la información del login anterior (sesión, etc)
|
|
if Assigned(FLoginInfo) then
|
|
FreeANDNil(FLoginInfo);
|
|
|
|
Result := (ROLoginService as IsrvLogin).Login(Usuario, Password, FLoginInfo);
|
|
|
|
if Result then
|
|
begin
|
|
// Lo guardo para poder reconectarme
|
|
FUsuario := Usuario;
|
|
FPassword := Password;
|
|
end;
|
|
end;
|
|
|
|
procedure TdmUsuarios.Logout;
|
|
begin
|
|
(ROLoginService as IsrvLogin).Logout;
|
|
if Assigned(FLoginInfo) then
|
|
FreeANDNil(FLoginInfo);
|
|
FUsuario := '';
|
|
FPassword := '';
|
|
end;
|
|
|
|
procedure TdmUsuarios.SetEmpresaActual(const Value: IBizEmpresa);
|
|
begin
|
|
FEmpresaActual := Value;
|
|
FEmpresaActual.DataTable.Active := True;
|
|
end;
|
|
|
|
procedure TdmUsuarios.SetIDEmpresaActual(const Value: Integer);
|
|
var
|
|
AEmpresasController : IEmpresasController;
|
|
AEmpresa : IBizEmpresa;
|
|
begin
|
|
AEmpresasController := TEmpresasController.Create;
|
|
AEmpresa := AEmpresasController.Buscar(Value);
|
|
AEmpresa.DataTable.Active := True;
|
|
|
|
if not AEmpresa.IsEmpty then
|
|
begin
|
|
FEmpresaActual := AEmpresa;
|
|
FEmpresaActual.DataTable.Active := True;
|
|
end
|
|
else
|
|
FEmpresaActual := NIL;
|
|
end;
|
|
|
|
procedure TdmUsuarios.DAClientDataModuleDestroy(Sender: TObject);
|
|
begin
|
|
if Assigned(FLoginInfo) then
|
|
FreeANDNil(FLoginInfo);
|
|
end;
|
|
|
|
function TdmUsuarios.GetEmpresas: TIntegerList;
|
|
var
|
|
i : integer;
|
|
begin
|
|
Result := TIntegerList.Create;
|
|
|
|
if not Assigned(FLoginInfo) then
|
|
raise Exception.Create('Usuario no validado en el sistema (login)');
|
|
|
|
for i := 0 to FLoginInfo.Empresas.Count - 1 do
|
|
Result.Add(FLoginInfo.Empresas.Items[i]);
|
|
end;
|
|
|
|
function TdmUsuarios.GetEsAdministrador: Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := False;
|
|
|
|
if not Assigned(FLoginInfo) then
|
|
raise Exception.Create('Usuario no validado en el sistema (login)');
|
|
|
|
for I := 0 to FLoginInfo.Perfiles.Count - 1 do
|
|
if FLoginInfo.Perfiles.Items[I] = PERFIL_ADMINISTRADORES then
|
|
begin
|
|
Result := True;
|
|
Break;
|
|
end;
|
|
end;
|
|
|
|
function TdmUsuarios.GetIDEmpresaActual: Integer;
|
|
begin
|
|
if not Assigned(FEmpresaActual) then
|
|
Result := ID_NULO
|
|
else
|
|
Result := FEmpresaActual.ID;
|
|
end;
|
|
|
|
procedure TdmUsuarios.CambiarPassword;
|
|
begin
|
|
with TfCambiarPassword.Create(NIL) do
|
|
try
|
|
if ShowModal = mrOk then
|
|
if CambiarPassword(edtPassword.Text) then
|
|
Application.MessageBox('La contraseña ha sido cambiada correctamente.', 'Información', MB_OK);
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
function TdmUsuarios.CambiarPassword(const APassword: String): boolean;
|
|
begin
|
|
{ if not (ROLoginService as IsrvLogin).SetUserPassword(LoginInfo.UserID, APassword) then
|
|
raise Exception.Create('Error en el servidor. No se ha podido cambiar la contraseña');}
|
|
Result := True;
|
|
end;
|
|
|
|
initialization
|
|
dmUsuarios := TdmUsuarios.Create(nil);
|
|
|
|
finalization
|
|
FreeAndNil(dmUsuarios);
|
|
|
|
end.
|